Skip to content

Commit

Permalink
Merge pull request #417 from jean-roland/ft_z_slice
Browse files Browse the repository at this point in the history
Zenoh-C z_slice and z_bytes types compatibility
  • Loading branch information
milyin authored Jun 13, 2024
2 parents b07c4d6 + 2dbc855 commit 9aa9ed1
Show file tree
Hide file tree
Showing 119 changed files with 1,583 additions and 787 deletions.
42 changes: 38 additions & 4 deletions docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,14 @@ Owned Types

TODO: owned type description

.. c:type:: z_owned_bytes_t
.. c:type:: z_owned_slice_t
Represents an array of bytes.

.. c:type:: z_owned_bytes_t
Represents an array of bytes container.

.. c:type:: z_owned_string_t
Represents a string without null-terminator.
Expand Down Expand Up @@ -130,10 +134,14 @@ Loaned Types

TODO: loaned type description

.. c:type:: z_loaned_bytes_t
.. c:type:: z_loaned_slice_t
Represents an array of bytes.

.. c:type:: z_loaned_bytes_t
Represents an array of bytes container.

.. c:type:: z_loaned_string_t
Represents a string without null-terminator.
Expand Down Expand Up @@ -250,7 +258,7 @@ Macros
Primitives
~~~~~~~~~~

.. autocfunction:: primitives.h::z_view_str_wrap
.. autocfunction:: primitives.h::z_view_string_wrap
.. autocfunction:: primitives.h::z_view_keyexpr_from_string
.. autocfunction:: primitives.h::z_view_keyexpr_from_string_unchecked
.. autocfunction:: primitives.h::z_keyexpr_to_string
Expand Down Expand Up @@ -282,9 +290,34 @@ Primitives
.. autocfunction:: primitives.h::z_encoding_move
.. autocfunction:: primitives.h::z_encoding_null
.. autocfunction:: primitives.h::z_value_payload
.. autocfunction:: primitives.h::z_bytes_len
.. autocfunction:: primitives.h::z_slice_data
.. autocfunction:: primitives.h::z_slice_len
.. autocfunction:: primitives.h::z_bytes_decode_into_int8
.. autocfunction:: primitives.h::z_bytes_decode_into_int16
.. autocfunction:: primitives.h::z_bytes_decode_into_int32
.. autocfunction:: primitives.h::z_bytes_decode_into_int64
.. autocfunction:: primitives.h::z_bytes_decode_into_uint8
.. autocfunction:: primitives.h::z_bytes_decode_into_uint16
.. autocfunction:: primitives.h::z_bytes_decode_into_uint32
.. autocfunction:: primitives.h::z_bytes_decode_into_uint64
.. autocfunction:: primitives.h::z_bytes_decode_into_float
.. autocfunction:: primitives.h::z_bytes_decode_into_double
.. autocfunction:: primitives.h::z_bytes_decode_into_slice
.. autocfunction:: primitives.h::z_bytes_decode_into_string
.. autocfunction:: primitives.h::z_bytes_encode_from_int8
.. autocfunction:: primitives.h::z_bytes_encode_from_int16
.. autocfunction:: primitives.h::z_bytes_encode_from_int32
.. autocfunction:: primitives.h::z_bytes_encode_from_int64
.. autocfunction:: primitives.h::z_bytes_encode_from_uint8
.. autocfunction:: primitives.h::z_bytes_encode_from_uint16
.. autocfunction:: primitives.h::z_bytes_encode_from_uint32
.. autocfunction:: primitives.h::z_bytes_encode_from_uint64
.. autocfunction:: primitives.h::z_bytes_encode_from_float
.. autocfunction:: primitives.h::z_bytes_encode_from_double
.. autocfunction:: primitives.h::z_bytes_encode_from_slice
.. autocfunction:: primitives.h::z_bytes_encode_from_slice_copy
.. autocfunction:: primitives.h::z_bytes_encode_from_string
.. autocfunction:: primitives.h::z_bytes_encode_from_string_copy
.. autocfunction:: primitives.h::z_timestamp_check
.. autocfunction:: primitives.h::z_query_target_default
.. autocfunction:: primitives.h::z_query_consolidation_auto
Expand All @@ -303,6 +336,7 @@ Primitives
.. autocfunction:: primitives.h::z_closure_zid
.. autocfunction:: primitives.h::z_sample_loan
.. autocfunction:: primitives.h::z_string_data
.. autocfunction:: primitives.h::z_string_len
.. autocfunction:: primitives.h::z_scout
.. autocfunction:: primitives.h::z_open
.. autocfunction:: primitives.h::z_close
Expand Down
6 changes: 2 additions & 4 deletions examples/arduino/z_get.ino
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,9 @@ void loop() {
z_get_options_t opts;
z_get_options_default(&opts);
// Value encoding
z_owned_bytes_t payload;
if (strcmp(VALUE, "") != 0) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, VALUE);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_view_string_loan(&value_str));
z_bytes_encode_from_string(&payload, VALUE);
opts.payload = &payload;
}
z_owned_closure_reply_t callback;
Expand Down
13 changes: 5 additions & 8 deletions examples/arduino/z_queryable.ino
Original file line number Diff line number Diff line change
Expand Up @@ -43,24 +43,21 @@ void query_handler(const z_loaned_query_t *query, void *arg) {
Serial.println("'");

// Process value
const z_loaned_bytes_t *payload = z_value_payload(z_query_value(query));
if (z_bytes_len(payload) > 0) {
z_owned_string_t payload_string;
z_bytes_decode_into_string(payload, &payload_string);
z_owned_string_t payload_string;
z_bytes_decode_into_string(z_value_payload(z_query_value(query)), &payload_string);
if (z_string_len(z_string_loan(&payload_string)) > 1) {
Serial.print(" with value '");
Serial.print(z_string_data(z_string_loan(&payload_string)));
Serial.println("'");
z_string_drop(z_string_move(&payload_string));
}
z_string_drop(z_string_move(&payload_string));

z_view_keyexpr_t ke;
z_view_keyexpr_from_string_unchecked(&ke, KEYEXPR);

// Reply value encoding
z_view_string_t reply_str;
z_view_string_wrap(&reply_str, VALUE);
z_owned_bytes_t reply_payload;
z_bytes_encode_from_string(&reply_payload, z_view_string_loan(&reply_str));
z_bytes_encode_from_string(&reply_payload, VALUE);

z_query_reply(query, z_view_keyexpr_loan(&ke), z_bytes_move(&reply_payload), NULL);

Expand Down
6 changes: 4 additions & 2 deletions examples/arduino/z_sub.ino
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,17 @@
void data_handler(const z_loaned_sample_t *sample, void *arg) {
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(sample), &keystr);
std::string val((const char *)z_sample_payload(sample)->start, z_sample_payload(sample)->len);
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(sample), &value);

Serial.print(" >> [Subscription listener] Received (");
Serial.print(z_string_data(z_string_loan(&keystr)));
Serial.print(", ");
Serial.print(val.c_str());
Serial.print(z_string_data(z_string_loan(&value)));
Serial.println(")");

z_string_drop(z_string_move(&keystr));
z_string_drop(z_string_move(&value));
}

void setup() {
Expand Down
6 changes: 2 additions & 4 deletions examples/espidf/z_get.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,9 @@ void app_main() {
z_get_options_t opts;
z_get_options_default(&opts);
// Value encoding
z_owned_bytes_t payload;
if (strcmp(VALUE, "") != 0) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, VALUE);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_loan(value_str));
z_bytes_encode_from_string(&payload, VALUE);
opts.payload = &payload;
}
z_owned_closure_reply_t callback;
Expand Down
15 changes: 7 additions & 8 deletions examples/espidf/z_queryable.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,20 +110,19 @@ void query_handler(const z_loaned_query_t *query, void *ctx) {
printf(" >> [Queryable handler] Received Query '%s%.*s'\n", z_string_data(z_loan(keystr)), (int)z_loan(params)->len,
z_loan(params)->val);
// Process value
const z_loaned_bytes_t *payload = z_value_payload(z_query_value(query));
if (z_bytes_len(payload) > 0) {
z_owned_string_t payload_string;
z_bytes_decode_into_string(payload, &payload_string);
z_owned_string_t payload_string;
z_bytes_decode_into_string(z_value_payload(z_query_value(query)), &payload_string);
if (z_string_len(z_loan(payload_string)) > 1) {
printf(" with value '%s'\n", z_string_data(z_loan(payload_string)));
z_drop(z_move(payload_string));
}
z_drop(z_move(payload_string));

z_view_keyexpr_t ke;
z_view_keyexpr_from_string_unchecked(&ke, KEYEXPR);

// Reply value encoding
z_view_string_t reply_str;
z_view_string_wrap(&reply_str, VALUE);
z_owned_bytes_t reply_payload;
z_bytes_encode_from_string(&reply_payload, z_loan(reply_str));
z_bytes_encode_from_string(&reply_payload, VALUE);

z_query_reply(query, z_loan(ke), z_move(reply_payload), NULL);
z_drop(z_move(keystr));
Expand Down
8 changes: 5 additions & 3 deletions examples/espidf/z_sub.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,12 @@ void wifi_init_sta(void) {
void data_handler(const z_loaned_sample_t* sample, void* arg) {
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(sample), &keystr);
const z_loaned_bytes_t* payload = z_sample_payload(sample);
printf(" >> [Subscriber handler] Received ('%s': '%.*s')\n", z_string_data(z_string_loan(&keystr)),
(int)payload->len, payload->start);
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(sample), &value);
printf(" >> [Subscriber handler] Received ('%s': '%s')\n", z_string_data(z_string_loan(&keystr)),
z_string_data(z_string_loan(&value)));
z_string_drop(z_string_move(&keystr));
z_string_drop(z_string_move(&value));
}

void app_main() {
Expand Down
6 changes: 2 additions & 4 deletions examples/freertos_plus_tcp/z_get.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,9 @@ void app_main(void) {
z_get_options_t opts;
z_get_options_default(&opts);
// Value encoding
z_owned_bytes_t payload;
if (strcmp(VALUE, "") != 0) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, VALUE);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_loan(value_str));
z_bytes_encode_from_string(&payload, VALUE);
opts.payload = &payload;
}
z_owned_closure_reply_t callback;
Expand Down
14 changes: 6 additions & 8 deletions examples/freertos_plus_tcp/z_queryable.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,18 @@ void query_handler(const z_loaned_query_t *query, void *ctx) {
printf(" >> [Queryable handler] Received Query '%s%.*s'\n", z_string_data(z_loan(keystr)), (int)z_loan(params)->len,
z_loan(params)->val);
// Process value
const z_loaned_bytes_t *payload = z_value_payload(z_query_value(query));
if (z_bytes_len(payload) > 0) {
z_owned_string_t payload_string;
z_bytes_decode_into_string(payload, &payload_string);
z_owned_string_t payload_string;
z_bytes_decode_into_string(z_value_payload(z_query_value(query)), &payload_string);
if (z_string_len(z_loan(payload_string)) > 1) {
printf(" with value '%s'\n", z_string_data(z_loan(payload_string)));
z_drop(z_move(payload_string));
}
z_drop(z_move(payload_string));

z_query_reply_options_t options;
z_query_reply_options_default(&options);
// Reply value encoding
z_view_string_t reply_str;
z_view_string_wrap(&reply_str, VALUE);
z_owned_bytes_t reply_payload;
z_bytes_encode_from_string(&reply_payload, z_loan(reply_str));
z_bytes_encode_from_string(&reply_payload, VALUE);

z_query_reply(query, z_query_keyexpr(query), z_move(reply_payload), &options);
z_drop(z_move(keystr));
Expand Down
7 changes: 4 additions & 3 deletions examples/freertos_plus_tcp/z_sub.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@ void data_handler(const z_loaned_sample_t *sample, void *ctx) {
(void)(ctx);
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(sample), &keystr);
const z_loaned_bytes_t *payload = z_sample_payload(sample);
printf(">> [Subscriber] Received ('%s': '%.*s')\n", z_string_data(z_loan(keystr)), (int)payload->len,
payload->start);
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(sample), &value);
printf(">> [Subscriber] Received ('%s': '%s')\n", z_string_data(z_loan(keystr)), z_string_data(z_loan(value)));
z_drop(z_move(keystr));
z_drop(z_move(value));
}

void app_main(void) {
Expand Down
8 changes: 4 additions & 4 deletions examples/freertos_plus_tcp/z_sub_st.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ void data_handler(const z_loaned_sample_t *sample, void *ctx) {
(void)(ctx);
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(sample), &keystr);
const z_loaned_bytes_t *payload = z_sample_payload(sample);
printf(">> [Subscriber] Received ('%s': '%.*s')\n", z_string_data(z_loan(keystr)), (int)payload->len,
payload->start);
z_drop(z_move(keystr));
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(sample), &value);
printf(">> [Subscriber] Received ('%s': '%s')\n", z_string_data(z_loan(keystr)), z_string_data(z_loan(value)));
z_drop(z_move(keystr));
z_drop(z_move(value));
msg_nb++;
}

Expand Down
6 changes: 2 additions & 4 deletions examples/mbed/z_get.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,9 @@ int main(int argc, char **argv) {
z_get_options_t opts;
z_get_options_default(&opts);
// Value encoding
z_owned_bytes_t payload;
if (strcmp(VALUE, "") != 0) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, VALUE);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_view_string_loan(&value_str));
z_bytes_encode_from_string(&payload, VALUE);
opts.payload = &payload;
}
z_owned_closure_reply_t callback;
Expand Down
14 changes: 6 additions & 8 deletions examples/mbed/z_queryable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,16 @@ void query_handler(const z_loaned_query_t *query, void *ctx) {
printf(" >> [Queryable handler] Received Query '%s%.*s'\n", z_string_data(z_string_loan(&keystr)),
(int)z_view_string_loan(&pred)->len, z_view_string_loan(&pred)->val);
// Process value
const z_loaned_bytes_t *payload = z_value_payload(z_query_value(query));
if (z_bytes_len(payload) > 0) {
z_owned_string_t payload_string;
z_bytes_decode_into_string(payload, &payload_string);
z_owned_string_t payload_string;
z_bytes_decode_into_string(z_value_payload(z_query_value(query)), &payload_string);
if (z_string_len(z_string_loan(&payload_string)) > 1) {
printf(" with value '%s'\n", z_string_data(z_string_loan(&payload_string)));
z_string_drop(z_string_move(&payload_string));
}
z_string_drop(z_string_move(&payload_string));

// Reply value encoding
z_view_string_t reply_str;
z_view_string_wrap(&reply_str, VALUE);
z_owned_bytes_t reply_payload;
z_bytes_encode_from_string(&reply_payload, z_view_string_loan(&reply_str));
z_bytes_encode_from_string(&reply_payload, VALUE);

z_query_reply(query, z_query_keyexpr(query), z_bytes_move(&reply_payload), NULL);
z_string_drop(z_string_move(&keystr));
Expand Down
8 changes: 5 additions & 3 deletions examples/mbed/z_sub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@
void data_handler(const z_loaned_sample_t *sample, void *arg) {
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(sample), &keystr);
const z_loaned_bytes_t *payload = z_sample_payload(sample);
printf(" >> [Subscriber handler] Received ('%s': '%.*s')\n", z_string_data(z_string_loan(&keystr)),
(int)payload->len, payload->start);
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(sample), &value);
printf(" >> [Subscriber handler] Received ('%s': '%s')\n", z_string_data(z_string_loan(&keystr)),
z_string_data(z_string_loan(&value)));
z_string_drop(z_string_move(&keystr));
z_string_drop(z_string_move(&value));
}

int main(int argc, char **argv) {
Expand Down
8 changes: 3 additions & 5 deletions examples/unix/c11/z_get.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,10 @@ int main(int argc, char **argv) {
printf("Sending Query '%s'...\n", keyexpr);
z_get_options_t opts;
z_get_options_default(&opts);

// Value encoding
z_owned_bytes_t payload;
if (value != NULL) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, value);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_loan(value_str));
z_bytes_encode_from_string(&payload, value);
opts.payload = &payload;
}
#if Z_FEATURE_ATTACHMENT == 1
Expand Down
6 changes: 2 additions & 4 deletions examples/unix/c11/z_get_channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,9 @@ int main(int argc, char **argv) {
z_get_options_t opts;
z_get_options_default(&opts);
// Value encoding
z_owned_bytes_t payload;
if (value != NULL) {
z_view_string_t value_str;
z_view_string_wrap(&value_str, value);
z_owned_bytes_t payload;
z_bytes_encode_from_string(&payload, z_loan(value_str));
z_bytes_encode_from_string(&payload, value);
opts.payload = &payload;
}
z_owned_reply_ring_channel_t channel;
Expand Down
6 changes: 4 additions & 2 deletions examples/unix/c11/z_pong.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
#if Z_FEATURE_SUBSCRIPTION == 1 && Z_FEATURE_PUBLICATION == 1
void callback(const z_loaned_sample_t* sample, void* context) {
const z_loaned_publisher_t* pub = z_loan(*(z_owned_publisher_t*)context);
const z_loaned_bytes_t* payload = z_sample_payload(sample);
z_publisher_put(pub, payload->start, payload->len, NULL);
z_owned_slice_t value;
z_bytes_decode_into_slice(z_sample_payload(sample), &value);
z_publisher_put(pub, z_slice_data(z_loan(value)), z_slice_len(z_loan(value)), NULL);
z_drop(z_move(value));
}
void drop(void* context) {
z_owned_publisher_t* pub = (z_owned_publisher_t*)context;
Expand Down
7 changes: 5 additions & 2 deletions examples/unix/c11/z_pull.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,12 @@ int main(int argc, char **argv) {
for (z_call(channel.try_recv, &sample); z_check(sample); z_call(channel.try_recv, &sample)) {
z_owned_string_t keystr;
z_keyexpr_to_string(z_sample_keyexpr(z_loan(sample)), &keystr);
printf(">> [Subscriber] Pulled ('%s': '%.*s')\n", z_string_data(z_loan(keystr)),
(int)z_sample_payload(z_loan(sample))->len, z_sample_payload(z_loan(sample))->start);
z_owned_string_t value;
z_bytes_decode_into_string(z_sample_payload(z_loan(sample)), &value);
printf(">> [Subscriber] Pulled ('%s': '%s')\n", z_string_data(z_loan(keystr)),
z_string_data(z_loan(value)));
z_drop(z_move(keystr));
z_drop(z_move(value));
z_drop(z_move(sample));
}
printf(">> [Subscriber] Nothing to pull... sleep for %zu ms\n", interval);
Expand Down
Loading

0 comments on commit 9aa9ed1

Please sign in to comment.