Fix MC to ommit empty objects

This commit is contained in:
2017-05-01 02:27:37 -05:00
parent 746dae0ec5
commit 4e610c3167
4 changed files with 17 additions and 7 deletions
+4 -3
View File
@@ -10,9 +10,6 @@
#include "err.hpp"
#include "presencemask.hpp"
#include <iostream>
using namespace std;
namespace ox {
FieldPresenseMask::FieldPresenseMask(uint8_t *mask, size_t maxLen) {
@@ -45,4 +42,8 @@ void FieldPresenseMask::setMaxLen(int maxLen) {
m_maxLen = maxLen;
}
int FieldPresenseMask::getMaxLen() {
return m_maxLen;
}
}
+2
View File
@@ -25,6 +25,8 @@ class FieldPresenseMask {
int set(int i, bool on);
void setMaxLen(int);
int getMaxLen();
};
}
+5 -3
View File
@@ -57,9 +57,11 @@ class MetalClawReader {
template<typename T>
int MetalClawReader::op(const char*, T *val) {
int err = 0;
MetalClawReader reader(m_buff + m_buffIt, m_buffLen - m_buffIt);
err |= ioOp(&reader, val);
m_buffIt += reader.m_buffIt;
if (m_fieldPresence.get(m_field)) {
MetalClawReader reader(m_buff + m_buffIt, m_buffLen - m_buffIt);
err |= ioOp(&reader, val);
m_buffIt += reader.m_buffIt;
}
m_field++;
return err;
};
+6 -1
View File
@@ -81,9 +81,14 @@ int MetalClawWriter::op(const char*, ox::bstring<L> *val) {
template<typename T>
int MetalClawWriter::op(const char*, T *val) {
int err = 0;
bool fieldSet = false;
MetalClawWriter writer(m_buff + m_buffIt, m_buffLen - m_buffIt);
err |= ioOp(&writer, val);
m_buffIt += writer.m_buffIt;
if ((size_t) writer.m_fieldPresence.getMaxLen() < writer.m_buffIt) {
m_buffIt += writer.m_buffIt;
fieldSet = true;
}
err |= m_fieldPresence.set(m_field, fieldSet);
m_field++;
return err;
};