[ox/mc] Fix int reads not to clear out unions

This commit is contained in:
Gary Talent 2020-04-13 02:37:08 -05:00
parent 1d07890668
commit d2e7528dae
2 changed files with 60 additions and 52 deletions

View File

@ -73,7 +73,7 @@ Error MetalClawReader::field(const char*, bool *val) {
}
Error MetalClawReader::field(const char*, SerStr val) {
if ((m_unionIdx == -1 || m_unionIdx == m_field)) {
if (m_unionIdx == -1 || m_unionIdx == m_field) {
if (m_fieldPresence.get(m_field)) {
// read the length
if (m_buffIt >= m_buffLen) {

View File

@ -145,7 +145,8 @@ Error MetalClawReader::field(const char *name, ox::BString<L> *val) {
template<typename I>
Error MetalClawReader::readInteger(I *val) {
if ((m_unionIdx == -1 || m_unionIdx == m_field) && m_fieldPresence.get(m_field)) {
if (m_unionIdx == -1 || m_unionIdx == m_field) {
if (m_fieldPresence.get(m_field)) {
std::size_t bytesRead = 0;
if (m_buffIt >= m_buffLen) {
oxTrace("ox::MetalClaw::readInteger") << "Buffer ended";
@ -158,6 +159,7 @@ Error MetalClawReader::readInteger(I *val) {
} else {
*val = 0;
}
}
++m_field;
return OxError(0);
}
@ -165,7 +167,8 @@ Error MetalClawReader::readInteger(I *val) {
// array handler
template<typename T>
Error MetalClawReader::field(const char *name, T *val, std::size_t valLen) {
if ((m_unionIdx == -1 || m_unionIdx == m_field) && m_fieldPresence.get(m_field)) {
if (m_unionIdx == -1 || m_unionIdx == m_field) {
if (m_fieldPresence.get(m_field)) {
// read the length
if (m_buffIt >= m_buffLen) {
return OxError(MC_BUFFENDED);
@ -187,13 +190,15 @@ Error MetalClawReader::field(const char *name, T *val, std::size_t valLen) {
return OxError(MC_OUTBUFFENDED);
}
}
}
++m_field;
return OxError(0);
}
template<typename T, typename Handler>
Error MetalClawReader::field(const char*, Handler handler) {
if ((m_unionIdx == -1 || m_unionIdx == m_field) && m_fieldPresence.get(m_field)) {
if (m_unionIdx == -1 || m_unionIdx == m_field) {
if (m_fieldPresence.get(m_field)) {
// read the length
if (m_buffIt >= m_buffLen) {
return OxError(MC_BUFFENDED);
@ -212,18 +217,21 @@ Error MetalClawReader::field(const char*, Handler handler) {
oxReturnError(handler(i, &val));
}
}
}
++m_field;
return OxError(0);
}
template<typename T>
Error MetalClawReader::field(const char* name, ox::Vector<T> *val) {
if ((m_unionIdx == -1 || m_unionIdx == m_field) && m_fieldPresence.get(m_field)) {
if (m_unionIdx == -1 || m_unionIdx == m_field) {
if (m_fieldPresence.get(m_field)) {
const auto [len, err] = arrayLength(name, false);
oxReturnError(err);
val->resize(len);
return field(name, val->data(), val->size());
}
}
return OxError(0);
}