JFJochFrameSerializer: Serializer buffer is managed externally
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user