1
0
forked from fsfw/fsfw

Local pool public members/functions moved to top

This commit is contained in:
2020-01-18 15:03:22 +01:00
parent 1f4391f56e
commit c9e4c73bd2
5 changed files with 135 additions and 120 deletions

View File

@ -71,6 +71,11 @@ ReturnValue_t SerialBufferAdapter<T>::deSerialize(const uint8_t** buffer,
//TODO Ignores Endian flag!
if (buffer != NULL) {
if(serializeLength){
// Suggestion (would require removing rest of the block inside this if clause !):
//ReturnValue_t result = AutoSerializeAdapter::deSerialize(&bufferLength,buffer,size,bigEndian);
//if (result != HasReturnvaluesIF::RETURN_OK) {
// return result;
//}
T serializedSize = AutoSerializeAdapter::getSerializedSize(
&bufferLength);
if((*size - bufferLength - serializedSize) >= 0){
@ -113,8 +118,9 @@ const uint8_t * SerialBufferAdapter<T>::getConstBuffer() {
}
template<typename T>
void SerialBufferAdapter<T>::setBuffer(uint8_t * buffer_) {
void SerialBufferAdapter<T>::setBuffer(uint8_t * buffer_, T bufferLength_) {
buffer = buffer_;
bufferLength = bufferLength_;
}

View File

@ -58,7 +58,7 @@ public:
uint8_t * getBuffer();
const uint8_t * getConstBuffer();
void setBuffer(uint8_t * buffer_);
void setBuffer(uint8_t * buffer_, T bufferLength_);
private:
enum bufferType {

View File

@ -29,12 +29,18 @@ public:
* @param bufferLength
* @param serializeLength
*/
SerialBufferAdapter2(BUFFER_TYPE * buffer_, count_t bufferLength_, bool serializeLength_ = false):
buffer(buffer_),bufferLength(bufferLength_), serializeLength(serializeLength_) {
determineLengthMultiplier(sizeof(count_t));
if(std::is_const<BUFFER_TYPE>::value) {
isConst = true;
}
SerialBufferAdapter2(void * buffer_, count_t bufferLength_, bool serializeLength_ = false):
bufferLength(bufferLength_), serializeLength(serializeLength_) {
determineLengthInBytes(sizeof(BUFFER_TYPE));
buffer = reinterpret_cast<const uint8_t *>(buffer_);
constBuffer = NULL;
}
SerialBufferAdapter2(const void * buffer_, count_t bufferLength_, bool serializeLength_ = false):
bufferLength(bufferLength_), serializeLength(serializeLength_) {
determineLengthInBytes(sizeof(BUFFER_TYPE));
constBuffer = reinterpret_cast<const uint8_t *>(buffer_);
buffer = NULL;
}
ReturnValue_t serialize(uint8_t ** buffer, uint32_t* size,
@ -69,9 +75,13 @@ public:
ReturnValue_t deSerialize(const uint8_t** buffer,
int32_t* size, bool bigEndian) {
//TODO Ignores Endian flag!
//UPDATE: Endian swapper introduced. Must be tested..
if (buffer != NULL) {
if(serializeLength){
// Suggestion (would require removing rest of the block inside this if clause !):
//ReturnValue_t result = AutoSerializeAdapter::deSerialize(&bufferLength,buffer,size,bigEndian);
//if (result != HasReturnvaluesIF::RETURN_OK) {
// return result;
//}
count_t serializedSize = AutoSerializeAdapter::getSerializedSize(
&bufferLength);
if((*size - bufferLength - serializedSize) >= 0){
@ -83,15 +93,8 @@ public:
}
//No Else If, go on with buffer
if (*size - bufferLength >= 0) {
uint8_t tmp [bufferLength];
uint8_t * pTmp = tmp;
if (bigEndian) {
EndianSwapper::swap<BUFFER_TYPE>(pTmp,*buffer, bufferLength);
} else {
pTmp = const_cast<uint8_t *>(*buffer);
}
*size -= bufferLength;
memcpy(const_cast<void *>(reinterpret_cast<const void*>(this->buffer)), pTmp, bufferLength);
memcpy(this->buffer, *buffer, bufferLength);
(*buffer) += bufferLength;
return HasReturnvaluesIF::RETURN_OK;
} else {
@ -103,24 +106,30 @@ public:
}
uint8_t * getBuffer() {
return reinterpret_cast<uint8_t *>(buffer);
BUFFER_TYPE * getBuffer() {
return reinterpret_cast<BUFFER_TYPE *>(buffer);
}
void setBuffer(BUFFER_TYPE * buffer_, count_t bufferLength_, bool serializeLength_ = false) {
void setBuffer(void * buffer_, count_t bufferLength_, bool serializeLength_ = false) {
buffer = buffer_;
bufferLength = bufferLength_;
serializeLength = serializeLength_;
determineLengthMultiplier(sizeof(count_t));
determineLengthInBytes(sizeof(BUFFER_TYPE));
}
void setConstBuffer(const void * buffer_, count_t bufferLength_, bool serializeLength_ = false) {
constBuffer = buffer_;
bufferLength = bufferLength_;
serializeLength = serializeLength_;
determineLengthInBytes(sizeof(BUFFER_TYPE));
}
private:
BUFFER_TYPE * buffer;
uint8_t * buffer;
const uint8_t * constBuffer;
count_t bufferLength;
bool serializeLength;
bool isConst = false;
void determineLengthMultiplier(uint8_t typeSize) {
void determineLengthInBytes(uint8_t typeSize) {
switch(typeSize) {
case(2):
bufferLength *= 2; break;
@ -134,6 +143,4 @@ private:
}
};
#endif /* SERIALBUFFERADAPTER2_H_ */