Skip to content

Commit

Permalink
make writer serializer owned and make them own z_bytes
Browse files Browse the repository at this point in the history
  • Loading branch information
DenisBiryukov91 committed Sep 27, 2024
1 parent 1079e04 commit 8db6c05
Show file tree
Hide file tree
Showing 18 changed files with 464 additions and 282 deletions.
28 changes: 23 additions & 5 deletions docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@ Data Structures
.. autoctype:: types.h::zp_send_join_options_t
.. autoctype:: types.h::z_bytes_reader_t
.. autoctype:: types.h::z_bytes_slice_iterator_t
.. autoctype:: types.h::z_bytes_writer_t
.. autoctype:: serialization.h::ze_serializer_t
.. autoctype:: serialization.h::ze_deserializer_t


Expand All @@ -72,6 +70,14 @@ See :ref:`owned_types_concept`
Represents an array of bytes container.

.. c:type:: z_owned_bytes_writer_t
Represents a payload writer.

.. c:type:: ze_owned_serializer_t
Represents a data serializer.

.. c:type:: z_owned_string_t
Represents a string without null-terminator.
Expand Down Expand Up @@ -141,6 +147,14 @@ See :ref:`loaned_types_concept`
Represents an array of bytes container.

.. c:type:: z_loaned_bytes_writer_t
Represents a payload writer.

.. c:type:: ze_loaned_serializer_t
Represents a data serializer.

.. c:type:: z_loaned_string_t
Represents a string without null-terminator.
Expand Down Expand Up @@ -321,7 +335,7 @@ Primitives
.. autocfunction:: primitives.h::z_slice_len
.. autocfunction:: primitives.h::z_slice_empty
.. autocfunction:: primitives.h::z_slice_is_empty
.. autocfunction:: serialization.h::ze_deserializer
.. autocfunction:: serialization.h::ze_deserializer_from_bytes
.. autocfunction:: serialization.h::ze_deserializer_deserialize_int8
.. autocfunction:: serialization.h::ze_deserializer_deserialize_int16
.. autocfunction:: serialization.h::ze_deserializer_deserialize_int32
Expand All @@ -336,7 +350,9 @@ Primitives
.. autocfunction:: serialization.h::ze_deserializer_deserialize_string
.. autocfunction:: serialization.h::ze_deserializer_deserialize_sequence_begin
.. autocfunction:: serialization.h::ze_deserializer_deserialize_sequence_end
.. autocfunction:: serialization.h::ze_serializer
.. autocfunction:: serialization.h::ze_serializer_empty
.. autocfunction:: serialization.h::ze_serializer_from_bytes
.. autocfunction:: serialization.h::ze_serializer_finish
.. autocfunction:: serialization.h::ze_serializer_serialize_int8
.. autocfunction:: serialization.h::ze_serializer_serialize_int16
.. autocfunction:: serialization.h::ze_serializer_serialize_int32
Expand Down Expand Up @@ -398,7 +414,9 @@ Primitives
.. autocfunction:: primitives.h::z_bytes_reader_read
.. autocfunction:: primitives.h::z_bytes_reader_seek
.. autocfunction:: primitives.h::z_bytes_reader_tell
.. autocfunction:: primitives.h::z_bytes_get_writer
.. autocfunction:: primitives.h::z_bytes_writer_empty
.. autocfunction:: primitives.h::z_bytes_writer_from_bytes
.. autocfunction:: primitives.h::z_bytes_writer_finish
.. autocfunction:: primitives.h::z_bytes_writer_write_all
.. autocfunction:: primitives.h::z_bytes_writer_append
.. autocfunction:: primitives.h::z_timestamp_check
Expand Down
67 changes: 38 additions & 29 deletions examples/unix/c11/z_bytes.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

#undef NDEBUG
#include <assert.h>
#include <zenoh-pico/api/serialization.h>

typedef struct custom_struct_t {
float f;
Expand Down Expand Up @@ -76,10 +75,12 @@ int main(void) {
{
uint8_t input_writer[] = {0, 1, 2, 3, 4};
uint8_t output_reader[5] = {0};
z_bytes_empty(&payload);
z_bytes_writer_t writer = z_bytes_get_writer(z_loan_mut(payload));
z_bytes_writer_write_all(&writer, input_writer, 3);
z_bytes_writer_write_all(&writer, input_writer + 3, 2);

z_owned_bytes_writer_t writer;
z_bytes_writer_empty(&writer);
z_bytes_writer_write_all(z_loan_mut(writer), input_writer, 3);
z_bytes_writer_write_all(z_loan_mut(writer), input_writer + 3, 2);
z_bytes_writer_finish(z_move(writer), &payload);
z_bytes_reader_t reader = z_bytes_get_reader(z_loan(payload));
z_bytes_reader_read(&reader, output_reader, sizeof(output_reader));
assert(0 == memcmp(input_writer, output_reader, sizeof(output_reader)));
Expand All @@ -91,14 +92,16 @@ int main(void) {
// A sequence of primitive types
int32_t input_vec[] = {1, 2, 3, 4};
int32_t output_vec[4] = {0};
ze_serializer_t serializer = ze_serializer(z_loan_mut(payload));
ze_serializer_serialize_sequence_begin(&serializer, 4);
ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 4);
for (size_t i = 0; i < 4; ++i) {
ze_serializer_serialize_int32(&serializer, input_vec[i]);
ze_serializer_serialize_int32(z_loan_mut(serializer), input_vec[i]);
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
ze_serializer_finish(z_move(serializer), &payload);

ze_deserializer_t deserializer = ze_deserializer(z_loan(payload));
ze_deserializer_t deserializer = ze_deserializer_from_bytes(z_loan(payload));
size_t num_elements = 0;
ze_deserializer_deserialize_sequence_begin(&deserializer, &num_elements);
assert(num_elements == 4);
Expand All @@ -121,15 +124,17 @@ int main(void) {
kvs_input[1].key = 1;
z_string_from_str(&kvs_input[1].value, "def", NULL, NULL);

ze_serializer_t serializer = ze_serializer(z_loan_mut(payload));
ze_serializer_serialize_sequence_begin(&serializer, 2);
ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 2);
for (size_t i = 0; i < 2; ++i) {
ze_serializer_serialize_int32(&serializer, kvs_input[i].key);
ze_serializer_serialize_string(&serializer, z_loan(kvs_input[i].value));
ze_serializer_serialize_int32(z_loan_mut(serializer), kvs_input[i].key);
ze_serializer_serialize_string(z_loan_mut(serializer), z_loan(kvs_input[i].value));
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
ze_serializer_finish(z_move(serializer), &payload);

ze_deserializer_t deserializer = ze_deserializer(z_loan(payload));
ze_deserializer_t deserializer = ze_deserializer_from_bytes(z_loan(payload));
size_t num_elements = 0;
ze_deserializer_deserialize_sequence_begin(&deserializer, &num_elements);
assert(num_elements == 2);
Expand All @@ -154,24 +159,26 @@ int main(void) {
// Custom struct/tuple serializaiton
custom_struct_t cs = (custom_struct_t){.f = 1.0f, .u = {{1, 2, 3}, {4, 5, 6}}, .c = "test"};

ze_serializer_t serializer = ze_serializer(z_loan_mut(payload));
ze_serializer_serialize_float(&serializer, cs.f);
ze_serializer_serialize_sequence_begin(&serializer, 2);
ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_float(z_loan_mut(serializer), cs.f);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 2);
for (size_t i = 0; i < 2; ++i) {
ze_serializer_serialize_sequence_begin(&serializer, 3);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 3);
for (size_t j = 0; j < 3; ++j) {
ze_serializer_serialize_uint64(&serializer, cs.u[i][j]);
ze_serializer_serialize_uint64(z_loan_mut(serializer), cs.u[i][j]);
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_str(&serializer, cs.c);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
ze_serializer_serialize_str(z_loan_mut(serializer), cs.c);
ze_serializer_finish(z_move(serializer), &payload);

float f = 0.0f;
uint64_t u = 0;
z_owned_string_t c;

ze_deserializer_t deserializer = ze_deserializer(z_loan(payload));
ze_deserializer_t deserializer = ze_deserializer_from_bytes(z_loan(payload));
ze_deserializer_deserialize_float(&deserializer, &f);
assert(f == cs.f);
size_t num_elements0 = 0;
Expand Down Expand Up @@ -202,11 +209,13 @@ int main(void) {
z_bytes_copy_from_str(&b1, "abc");
z_bytes_copy_from_str(&b2, "def");
z_bytes_copy_from_str(&b3, "hij");
z_bytes_writer_t writer = z_bytes_get_writer(z_loan_mut(payload));
z_bytes_writer_append(&writer, z_move(b1));
z_bytes_writer_append(&writer, z_move(b2));
z_bytes_writer_append(&writer, z_move(b3));
z_owned_bytes_writer_t writer;
z_bytes_writer_empty(&writer);
z_bytes_writer_append(z_loan_mut(writer), z_move(b1));
z_bytes_writer_append(z_loan_mut(writer), z_move(b2));
z_bytes_writer_append(z_loan_mut(writer), z_move(b3));

z_bytes_writer_finish(z_move(writer), &payload);
z_bytes_slice_iterator_t slice_iter = z_bytes_get_slice_iterator(z_bytes_loan(&payload));
z_view_slice_t curr_slice;
while (z_bytes_slice_iterator_next(&slice_iter, &curr_slice)) {
Expand Down
17 changes: 9 additions & 8 deletions examples/unix/c11/z_get_attachment.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include <stdlib.h>
#include <unistd.h>
#include <zenoh-pico.h>
#include <zenoh-pico/api/serialization.h>

typedef struct kv_pair_t {
z_owned_string_t key;
Expand Down Expand Up @@ -72,7 +71,7 @@ void reply_handler(z_loaned_reply_t *reply, void *ctx) {
if (attachment == NULL) {
return;
}
ze_deserializer_t deserializer = ze_deserializer(attachment);
ze_deserializer_t deserializer = ze_deserializer_from_bytes(attachment);
size_t attachment_len;
ze_deserializer_deserialize_sequence_begin(&deserializer, &attachment_len);
kv_pair_t *kvp = (kv_pair_t *)malloc(sizeof(kv_pair_t) * attachment_len);
Expand Down Expand Up @@ -177,15 +176,17 @@ int main(int argc, char **argv) {
z_string_from_str(&kvs[0].key, "test_key", NULL, NULL);
z_string_from_str(&kvs[0].value, "test_value", NULL, NULL);
z_owned_bytes_t attachment;
z_bytes_empty(&attachment);
ze_serializer_t serializer = ze_serializer(z_loan_mut(attachment));
ze_serializer_serialize_sequence_begin(&serializer, 2);

ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 2);
for (size_t i = 0; i < 1; ++i) {
ze_serializer_serialize_string(&serializer, z_loan(kvs[i].key));
ze_serializer_serialize_string(&serializer, z_loan(kvs[i].value));
ze_serializer_serialize_string(z_loan_mut(serializer), z_loan(kvs[i].key));
ze_serializer_serialize_string(z_loan_mut(serializer), z_loan(kvs[i].value));
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
drop_attachment(kvs, 1);
ze_serializer_finish(z_move(serializer), &attachment);
opts.attachment = z_move(attachment);

// Add encoding value
Expand Down
13 changes: 7 additions & 6 deletions examples/unix/c11/z_pub_attachment.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <time.h>
#include <unistd.h>
#include <zenoh-pico.h>
#include <zenoh-pico/api/serialization.h>
#include <zenoh-pico/system/platform.h>

typedef struct kv_pair_t {
Expand Down Expand Up @@ -145,13 +144,15 @@ int main(int argc, char **argv) {
// Add attachment value
sprintf(buf_ind, "%d", idx);
kvs[1] = (kv_pair_t){.key = "index", .value = buf_ind};
ze_serializer_t serializer = ze_serializer(z_loan_mut(attachment));
ze_serializer_serialize_sequence_begin(&serializer, 2);
ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 2);
for (size_t i = 0; i < 2; ++i) {
ze_serializer_serialize_str(&serializer, kvs[i].key);
ze_serializer_serialize_str(&serializer, kvs[i].value);
ze_serializer_serialize_str(z_loan_mut(serializer), kvs[i].key);
ze_serializer_serialize_str(z_loan_mut(serializer), kvs[i].value);
}
ze_serializer_serialize_sequence_end(&serializer);
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
ze_serializer_finish(z_move(serializer), &attachment);
options.attachment = z_move(attachment);

// Add encoding value
Expand Down
16 changes: 8 additions & 8 deletions examples/unix/c11/z_queryable_attachment.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include <stdlib.h>
#include <unistd.h>
#include <zenoh-pico.h>
#include <zenoh-pico/api/serialization.h>

typedef struct kv_pair_t {
z_owned_string_t key;
Expand Down Expand Up @@ -69,7 +68,7 @@ void query_handler(z_loaned_query_t *query, void *ctx) {
// Check attachment
const z_loaned_bytes_t *attachment = z_query_attachment(query);
if (attachment != NULL) {
ze_deserializer_t deserializer = ze_deserializer(attachment);
ze_deserializer_t deserializer = ze_deserializer_from_bytes(attachment);
size_t attachment_len;
ze_deserializer_deserialize_sequence_begin(&deserializer, &attachment_len);
kv_pair_t *kvp = (kv_pair_t *)malloc(sizeof(kv_pair_t) * attachment_len);
Expand All @@ -94,15 +93,16 @@ void query_handler(z_loaned_query_t *query, void *ctx) {

// Reply attachment
z_owned_bytes_t reply_attachment;
z_bytes_empty(&reply_attachment);
kv_pair_t kvs[1];
z_string_from_str(&kvs[0].key, "reply_key", NULL, NULL);
z_string_from_str(&kvs[0].value, "reply_value", NULL, NULL);
ze_serializer_t serializer = ze_serializer(z_loan_mut(reply_attachment));
ze_serializer_serialize_sequence_begin(&serializer, 1);
ze_serializer_serialize_string(&serializer, z_loan(kvs[0].key));
ze_serializer_serialize_string(&serializer, z_loan(kvs[0].value));
ze_serializer_serialize_sequence_end(&serializer);
ze_owned_serializer_t serializer;
ze_serializer_empty(&serializer);
ze_serializer_serialize_sequence_begin(z_loan_mut(serializer), 1);
ze_serializer_serialize_string(z_loan_mut(serializer), z_loan(kvs[0].key));
ze_serializer_serialize_string(z_loan_mut(serializer), z_loan(kvs[0].value));
ze_serializer_serialize_sequence_end(z_loan_mut(serializer));
ze_serializer_finish(z_move(serializer), &reply_attachment);
options.attachment = z_move(reply_attachment);
drop_attachment(kvs, 1);

Expand Down
3 changes: 1 addition & 2 deletions examples/unix/c11/z_sub_attachment.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <stdlib.h>
#include <unistd.h>
#include <zenoh-pico.h>
#include <zenoh-pico/api/serialization.h>

typedef struct kv_pair_t {
z_owned_string_t key;
Expand Down Expand Up @@ -67,7 +66,7 @@ void data_handler(z_loaned_sample_t *sample, void *ctx) {
// Check attachment
const z_loaned_bytes_t *attachment = z_sample_attachment(sample);
if (attachment != NULL) {
ze_deserializer_t deserializer = ze_deserializer(attachment);
ze_deserializer_t deserializer = ze_deserializer_from_bytes(attachment);
size_t attachment_len;
ze_deserializer_deserialize_sequence_begin(&deserializer, &attachment_len);
kv_pair_t *kvp = (kv_pair_t *)malloc(sizeof(kv_pair_t) * attachment_len);
Expand Down
1 change: 1 addition & 0 deletions include/zenoh-pico.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "zenoh-pico/api/handlers.h"
#include "zenoh-pico/api/macros.h"
#include "zenoh-pico/api/primitives.h"
#include "zenoh-pico/api/serialization.h"
#include "zenoh-pico/api/types.h"
#include "zenoh-pico/config.h"

Expand Down
Loading

0 comments on commit 8db6c05

Please sign in to comment.