serialize changes. #35

Closed
muellerr wants to merge 21 commits from KSat:mueller_Serialization into master
2 changed files with 21 additions and 16 deletions
Showing only changes of commit d8f45d7b67 - Show all commits

View File

@ -12,7 +12,7 @@ SerialBufferAdapter<count_t>::SerialBufferAdapter(const uint8_t* buffer,
template<typename count_t> template<typename count_t>
SerialBufferAdapter<count_t>::SerialBufferAdapter(uint8_t* buffer, SerialBufferAdapter<count_t>::SerialBufferAdapter(uint8_t* buffer,
count_t bufferLength, bool serializeLength) : count_t bufferLength, bool serializeLength) :
serializeLength(serializeLength), buffer(buffer), constBuffer(buffer), serializeLength(serializeLength), constBuffer(buffer), buffer(buffer),
bufferLength(bufferLength) {} bufferLength(bufferLength) {}
@ -21,29 +21,33 @@ SerialBufferAdapter<count_t>::~SerialBufferAdapter() {
} }
template<typename count_t> template<typename count_t>
ReturnValue_t SerialBufferAdapter<count_t>::serialize(uint8_t** buffer, ReturnValue_t SerialBufferAdapter<count_t>::serialize(uint8_t** buffer_,
size_t* size, const size_t max_size, bool bigEndian) const { size_t* size_, const size_t max_size, bool bigEndian) const {
uint32_t serializedLength = bufferLength; uint32_t serializedLength = bufferLength;
if (serializeLength) { if (serializeLength) {
serializedLength += AutoSerializeAdapter::getSerializedSize( serializedLength += AutoSerializeAdapter::getSerializedSize(
&bufferLength); &bufferLength);
} }
if (*size + serializedLength > max_size) { if (*size_ + serializedLength > max_size) {
return BUFFER_TOO_SHORT; return BUFFER_TOO_SHORT;
} else { } else {
if (serializeLength) { if (serializeLength) {
AutoSerializeAdapter::serialize(&bufferLength, buffer, size, AutoSerializeAdapter::serialize(&bufferLength, buffer_, size_,
max_size, bigEndian); max_size, bigEndian);
} }
if (constBuffer != nullptr) { if (constBuffer != nullptr) {
memcpy(*buffer, constBuffer, bufferLength); memcpy(*buffer_, this->constBuffer, bufferLength);
} else if (buffer != nullptr) { }
memcpy(*buffer, buffer, bufferLength); else if (buffer != nullptr) {
} else { // This will propably be never reached, constBuffer should always be
// set if non-const buffer is set.
memcpy(*buffer_, this->buffer, bufferLength);
}
else {
return HasReturnvaluesIF::RETURN_FAILED; return HasReturnvaluesIF::RETURN_FAILED;
} }
*size += bufferLength; *size_ += bufferLength;
(*buffer) += bufferLength; (*buffer_) += bufferLength;
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }
} }
@ -93,7 +97,7 @@ template<typename count_t>
uint8_t * SerialBufferAdapter<count_t>::getBuffer() { uint8_t * SerialBufferAdapter<count_t>::getBuffer() {
if(buffer == nullptr) { if(buffer == nullptr) {
sif::error << "Wrong access function for stored type !" sif::error << "Wrong access function for stored type !"
" Use getConstBuffer()" << std::endl; " Use getConstBuffer()." << std::endl;
return nullptr; return nullptr;
} }
return buffer; return buffer;
@ -110,9 +114,10 @@ const uint8_t * SerialBufferAdapter<count_t>::getConstBuffer() {
template<typename count_t> template<typename count_t>
void SerialBufferAdapter<count_t>::setBuffer(uint8_t* buffer, void SerialBufferAdapter<count_t>::setBuffer(uint8_t* buffer,
count_t buffer_length) { count_t bufferLength) {
this->buffer = buffer; this->buffer = buffer;
bufferLength = buffer_length; this->constBuffer = buffer;
this->bufferLength = bufferLength;
} }

View File

@ -45,7 +45,7 @@ public:
virtual ~SerialBufferAdapter(); virtual ~SerialBufferAdapter();
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size, virtual ReturnValue_t serialize(uint8_t** buffer_, size_t* size,
const size_t max_size, bool bigEndian) const override; const size_t max_size, bool bigEndian) const override;
virtual size_t getSerializedSize() const; virtual size_t getSerializedSize() const;
@ -67,7 +67,7 @@ public:
uint8_t * getBuffer(); uint8_t * getBuffer();
const uint8_t * getConstBuffer(); const uint8_t * getConstBuffer();
void setBuffer(uint8_t* buffer_, count_t bufferLength_); void setBuffer(uint8_t* buffer, count_t bufferLength);
private: private:
bool serializeLength = false; bool serializeLength = false;
const uint8_t *constBuffer = nullptr; const uint8_t *constBuffer = nullptr;