JFJochFrameSerializer: Serializer buffer is managed externally

This commit is contained in:
2023-05-09 15:36:56 +02:00
parent 70fb7b96f8
commit 2c62d01759
6 changed files with 74 additions and 62 deletions
+11 -16
View File
@@ -298,17 +298,12 @@ inline void CBOR_ENC_USER_DATA(CborEncoder &encoder, const StartMessage& message
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
}
JFJochFrameSerializer::JFJochFrameSerializer(size_t in_max_buffer_size) :
max_buffer_size(in_max_buffer_size), curr_size(0) {
buffer.resize(max_buffer_size);
}
JFJochFrameSerializer::JFJochFrameSerializer(uint8_t *in_buffer, size_t buffer_size) :
buffer(in_buffer), max_buffer_size(buffer_size), curr_size(0) {}
const uint8_t *JFJochFrameSerializer::GetBuffer() const {
return buffer.data();
}
uint8_t *JFJochFrameSerializer::GetImageAppendLocation() {
return buffer.data() + curr_size + sizeof(size_t);
size_t JFJochFrameSerializer::GetImageAppendOffset() {
return curr_size + sizeof(size_t);
}
size_t JFJochFrameSerializer::GetBufferSize() const {
@@ -330,7 +325,7 @@ void JFJochFrameSerializer::AppendImage(size_t image_size) {
#else
size_t image_size_be = image_size;
#endif
memcpy(buffer.data() + curr_size, &image_size_be, sizeof(size_t));
memcpy(buffer + curr_size, &image_size_be, sizeof(size_t));
curr_size += sizeof(size_t);
curr_size += image_size;
}
@@ -339,7 +334,7 @@ void JFJochFrameSerializer::AppendImage(size_t image_size) {
void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message) {
CborEncoder encoder, mapEncoder;
cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0);
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
size_t elements = 27;
@@ -381,12 +376,12 @@ void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message)
CBOR_ENC_CHANNELS(mapEncoder, "channels", message.channels);
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data());
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
}
void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) {
CborEncoder encoder, mapEncoder;
cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0);
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
cborErr(cbor_encode_tag(&encoder,CborSignatureTag ));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 9));
@@ -401,12 +396,12 @@ void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) {
CBOR_ENC_RAD_INT_RESULT(mapEncoder, "rad_int_result", message.rad_int_result);
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data());
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
}
void JFJochFrameSerializer::SerializeImage(const DataMessage& message) {
CborEncoder encoder, mapEncoder, userDataMapEncoder;
cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0);
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 6));
@@ -431,6 +426,6 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) {
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer.data());
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
}