[ox/preloader] Make Preloader use small string section of strings when able
This commit is contained in:
parent
86cbf66699
commit
3040e6c90a
11
deps/ox/src/ox/preloader/preloader.hpp
vendored
11
deps/ox/src/ox/preloader/preloader.hpp
vendored
@ -175,15 +175,20 @@ constexpr ox::Error Preloader<PlatSpec>::field(CRStringView, const ox::BasicStri
|
||||
}
|
||||
using VecMap = ox::VectorMemMap<PlatSpec>;
|
||||
const auto sz = val->bytes();
|
||||
oxRequire(a, ox::allocate(&m_writer, sz));
|
||||
const VecMap vecVal{
|
||||
VecMap vecVal{
|
||||
.smallVecSize = SmallStringSize,
|
||||
.size = PlatSpec::correctEndianness(static_cast<typename PlatSpec::size_t>(sz)),
|
||||
.cap = PlatSpec::correctEndianness(static_cast<typename PlatSpec::size_t>(sz)),
|
||||
.items = sz ? PlatSpec::correctEndianness(static_cast<typename PlatSpec::size_t>(a) + PlatSpec::RomStart) : 0,
|
||||
};
|
||||
oxReturnError(pad(&vecVal));
|
||||
const auto restore = m_writer.tellp();
|
||||
std::size_t a = 0;
|
||||
if (sz && sz >= SmallStringSize) {
|
||||
oxReturnError(ox::allocate(&m_writer, sz).moveTo(&a));
|
||||
} else {
|
||||
a = restore;
|
||||
}
|
||||
vecVal.items = sz ? PlatSpec::correctEndianness(static_cast<typename PlatSpec::size_t>(a) + PlatSpec::RomStart) : 0;
|
||||
oxReturnError(m_writer.seekp(a));
|
||||
oxReturnError(m_writer.write(val->data(), sz));
|
||||
oxReturnError(m_writer.seekp(restore));
|
||||
|
Loading…
Reference in New Issue
Block a user