Skip to content

Commit

Permalink
Move and rename macros for define owned/loaned/view types
Browse files Browse the repository at this point in the history
  • Loading branch information
sashacmc committed Jun 18, 2024
1 parent cd525c4 commit 2f1b8c1
Show file tree
Hide file tree
Showing 4 changed files with 249 additions and 215 deletions.
82 changes: 28 additions & 54 deletions include/zenoh-pico/api/primitives.h
Original file line number Diff line number Diff line change
Expand Up @@ -1029,60 +1029,34 @@ int8_t z_closure_hello(z_owned_closure_hello_t *closure, z_loaned_hello_handler_
int8_t z_closure_zid(z_owned_closure_zid_t *closure, z_id_handler_t call, z_dropper_handler_t drop, void *context);

/**************** Loans ****************/
#define _OWNED_FUNCTIONS(loanedtype, ownedtype, name) \
_Bool z_##name##_check(const ownedtype *obj); \
const loanedtype *z_##name##_loan(const ownedtype *obj); \
loanedtype *z_##name##_loan_mut(ownedtype *obj); \
ownedtype *z_##name##_move(ownedtype *obj); \
int8_t z_##name##_clone(ownedtype *obj, const loanedtype *src); \
void z_##name##_drop(ownedtype *obj); \
void z_##name##_null(ownedtype *obj);

_OWNED_FUNCTIONS(z_loaned_string_t, z_owned_string_t, string)
_OWNED_FUNCTIONS(z_loaned_keyexpr_t, z_owned_keyexpr_t, keyexpr)
_OWNED_FUNCTIONS(z_loaned_config_t, z_owned_config_t, config)
_OWNED_FUNCTIONS(z_loaned_scouting_config_t, z_owned_scouting_config_t, scouting_config)
_OWNED_FUNCTIONS(z_loaned_session_t, z_owned_session_t, session)
_OWNED_FUNCTIONS(z_loaned_subscriber_t, z_owned_subscriber_t, subscriber)
_OWNED_FUNCTIONS(z_loaned_publisher_t, z_owned_publisher_t, publisher)
_OWNED_FUNCTIONS(z_loaned_queryable_t, z_owned_queryable_t, queryable)
_OWNED_FUNCTIONS(z_loaned_hello_t, z_owned_hello_t, hello)
_OWNED_FUNCTIONS(z_loaned_reply_t, z_owned_reply_t, reply)
_OWNED_FUNCTIONS(z_loaned_string_array_t, z_owned_string_array_t, string_array)
_OWNED_FUNCTIONS(z_loaned_sample_t, z_owned_sample_t, sample)
_OWNED_FUNCTIONS(z_loaned_query_t, z_owned_query_t, query)
_OWNED_FUNCTIONS(z_loaned_slice_t, z_owned_slice_t, slice)
_OWNED_FUNCTIONS(z_loaned_bytes_t, z_owned_bytes_t, bytes)
_OWNED_FUNCTIONS(z_loaned_value_t, z_owned_value_t, value)

#define _OWNED_FUNCTIONS_CLOSURE(ownedtype, name) \
_Bool z_##name##_check(const ownedtype *val); \
ownedtype *z_##name##_move(ownedtype *val); \
void z_##name##_drop(ownedtype *val); \
void z_##name##_null(ownedtype *name);

_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_sample_t, closure_sample)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_owned_sample_t, closure_owned_sample)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_query_t, closure_query)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_owned_query_t, closure_owned_query)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_reply_t, closure_reply)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_owned_reply_t, closure_owned_reply)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_hello_t, closure_hello)
_OWNED_FUNCTIONS_CLOSURE(z_owned_closure_zid_t, closure_zid)

#define _VIEW_FUNCTIONS(loanedtype, viewtype, name) \
const loanedtype *z_view_##name##_loan(const viewtype *name); \
loanedtype *z_view_##name##_loan_mut(viewtype *name); \
void z_view_##name##_null(viewtype *name);

_VIEW_FUNCTIONS(z_loaned_keyexpr_t, z_view_keyexpr_t, keyexpr)
_VIEW_FUNCTIONS(z_loaned_string_t, z_view_string_t, string)

// Gets internal value from refcounted type (e.g. z_loaned_session_t, z_query_t)
#define _Z_RC_IN_VAL(arg) ((arg)->in->val)

// Gets internal value from refcounted owned type (e.g. z_owned_session_t, z_owned_query_t)
#define _Z_OWNED_RC_IN_VAL(arg) ((arg)->_rc.in->val)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_string_t, z_owned_string_t, string)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_keyexpr_t, z_owned_keyexpr_t, keyexpr)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_config_t, z_owned_config_t, config)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_scouting_config_t, z_owned_scouting_config_t, scouting_config)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_session_t, z_owned_session_t, session)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_subscriber_t, z_owned_subscriber_t, subscriber)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_publisher_t, z_owned_publisher_t, publisher)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_queryable_t, z_owned_queryable_t, queryable)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_hello_t, z_owned_hello_t, hello)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_reply_t, z_owned_reply_t, reply)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_string_array_t, z_owned_string_array_t, string_array)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_sample_t, z_owned_sample_t, sample)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_query_t, z_owned_query_t, query)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_slice_t, z_owned_slice_t, slice)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_bytes_t, z_owned_bytes_t, bytes)
_Z_OWNED_FUNCTIONS_DEF(z_loaned_value_t, z_owned_value_t, value)

_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_sample_t, closure_sample)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_owned_sample_t, closure_owned_sample)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_query_t, closure_query)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_owned_query_t, closure_owned_query)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_reply_t, closure_reply)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_owned_reply_t, closure_owned_reply)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_hello_t, closure_hello)
_Z_OWNED_FUNCTIONS_CLOSURE_DEF(z_owned_closure_zid_t, closure_zid)

_Z_VIEW_FUNCTIONS_DEF(z_loaned_keyexpr_t, z_view_keyexpr_t, keyexpr)
_Z_VIEW_FUNCTIONS_DEF(z_loaned_string_t, z_view_string_t, string)

/**
* Loans a :c:type:`z_owned_sample_t`.
Expand Down
96 changes: 38 additions & 58 deletions include/zenoh-pico/api/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,12 @@
#include "zenoh-pico/net/session.h"
#include "zenoh-pico/net/subscribe.h"
#include "zenoh-pico/protocol/core.h"
#include "zenoh-pico/utils/olv_macros.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Owned/Loaned types */

// For pointer types
#define _OWNED_TYPE_PTR(type, name) \
typedef struct { \
type *_val; \
} z_owned_##name##_t;

// For refcounted types
#define _OWNED_TYPE_RC(type, name) \
typedef struct { \
type _rc; \
} z_owned_##name##_t;

#define _LOANED_TYPE(type, name) typedef type z_loaned_##name##_t;

#define _VIEW_TYPE(type, name) \
typedef struct { \
type _val; \
} z_view_##name##_t;

/**
* Represents a variable-length encoding unsigned integer.
*
Expand Down Expand Up @@ -82,17 +62,17 @@ typedef _z_timestamp_t z_timestamp_t;
* size_t len: The length of the bytes array.
* uint8_t *start: A pointer to the bytes array.
*/
_OWNED_TYPE_PTR(_z_slice_t, slice)
_LOANED_TYPE(_z_slice_t, slice)
_Z_OWNED_TYPE_PTR(_z_slice_t, slice)
_Z_LOANED_TYPE(_z_slice_t, slice)

/**
* Represents a container for slices.
*
* Members:
* _z_slice_t slice: content of the container.
*/
_OWNED_TYPE_PTR(_z_bytes_t, bytes)
_LOANED_TYPE(_z_bytes_t, bytes)
_Z_OWNED_TYPE_PTR(_z_bytes_t, bytes)
_Z_LOANED_TYPE(_z_bytes_t, bytes)

/**
* Represents a string without null-terminator.
Expand All @@ -101,9 +81,9 @@ _LOANED_TYPE(_z_bytes_t, bytes)
* size_t len: The length of the string.
* const char *val: A pointer to the string.
*/
_OWNED_TYPE_PTR(_z_string_t, string)
_LOANED_TYPE(_z_string_t, string)
_VIEW_TYPE(_z_string_t, string)
_Z_OWNED_TYPE_PTR(_z_string_t, string)
_Z_LOANED_TYPE(_z_string_t, string)
_Z_VIEW_TYPE(_z_string_t, string)

/**
* Represents a key expression in Zenoh.
Expand All @@ -115,9 +95,9 @@ _VIEW_TYPE(_z_string_t, string)
* - :c:func:`z_keyexpr_to_string`
* - :c:func:`zp_keyexpr_resolve`
*/
_OWNED_TYPE_PTR(_z_keyexpr_t, keyexpr)
_LOANED_TYPE(_z_keyexpr_t, keyexpr)
_VIEW_TYPE(_z_keyexpr_t, keyexpr)
_Z_OWNED_TYPE_PTR(_z_keyexpr_t, keyexpr)
_Z_LOANED_TYPE(_z_keyexpr_t, keyexpr)
_Z_VIEW_TYPE(_z_keyexpr_t, keyexpr)

/**
* Represents a Zenoh configuration, used to configure Zenoh sessions upon opening.
Expand All @@ -129,8 +109,8 @@ _VIEW_TYPE(_z_keyexpr_t, keyexpr)
* - :c:func:`zp_config_get`
* - :c:func:`zp_config_insert`
*/
_OWNED_TYPE_PTR(_z_config_t, config)
_LOANED_TYPE(_z_config_t, config)
_Z_OWNED_TYPE_PTR(_z_config_t, config)
_Z_LOANED_TYPE(_z_config_t, config)

/**
* Represents a scouting configuration, used to configure a scouting procedure.
Expand All @@ -142,14 +122,14 @@ _LOANED_TYPE(_z_config_t, config)
* - :c:func:`zp_scouting_config_get`
* - :c:func:`zp_scouting_config_insert`
*/
_OWNED_TYPE_PTR(_z_scouting_config_t, scouting_config)
_LOANED_TYPE(_z_scouting_config_t, scouting_config)
_Z_OWNED_TYPE_PTR(_z_scouting_config_t, scouting_config)
_Z_LOANED_TYPE(_z_scouting_config_t, scouting_config)

/**
* Represents a Zenoh Session.
*/
_OWNED_TYPE_RC(_z_session_rc_t, session)
_LOANED_TYPE(_z_session_rc_t, session)
_Z_OWNED_TYPE_RC(_z_session_rc_t, session)
_Z_LOANED_TYPE(_z_session_rc_t, session)

/**
* Represents a Zenoh Subscriber entity.
Expand All @@ -159,8 +139,8 @@ _LOANED_TYPE(_z_session_rc_t, session)
* - :c:func:`z_declare_subscriber`
* - :c:func:`z_undeclare_subscriber`
*/
_OWNED_TYPE_PTR(_z_subscriber_t, subscriber)
_LOANED_TYPE(_z_subscriber_t, subscriber)
_Z_OWNED_TYPE_PTR(_z_subscriber_t, subscriber)
_Z_LOANED_TYPE(_z_subscriber_t, subscriber)

/**
* Represents a Zenoh Publisher entity.
Expand All @@ -172,8 +152,8 @@ _LOANED_TYPE(_z_subscriber_t, subscriber)
* - :c:func:`z_publisher_put`
* - :c:func:`z_publisher_delete`
*/
_OWNED_TYPE_PTR(_z_publisher_t, publisher)
_LOANED_TYPE(_z_publisher_t, publisher)
_Z_OWNED_TYPE_PTR(_z_publisher_t, publisher)
_Z_LOANED_TYPE(_z_publisher_t, publisher)

/**
* Represents a Zenoh Queryable entity.
Expand All @@ -183,15 +163,15 @@ _LOANED_TYPE(_z_publisher_t, publisher)
* - :c:func:`z_declare_queryable`
* - :c:func:`z_undeclare_queryable`
*/
_OWNED_TYPE_PTR(_z_queryable_t, queryable)
_LOANED_TYPE(_z_queryable_t, queryable)
_Z_OWNED_TYPE_PTR(_z_queryable_t, queryable)
_Z_LOANED_TYPE(_z_queryable_t, queryable)

/**
* Represents a Zenoh Query entity, received by Zenoh Queryable entities.
*
*/
_OWNED_TYPE_RC(_z_query_rc_t, query)
_LOANED_TYPE(_z_query_rc_t, query)
_Z_OWNED_TYPE_RC(_z_query_rc_t, query)
_Z_LOANED_TYPE(_z_query_rc_t, query)

/**
* Represents the encoding of a payload, in a MIME-like format.
Expand All @@ -200,8 +180,8 @@ _LOANED_TYPE(_z_query_rc_t, query)
* z_encoding_id_t prefix: The integer prefix of this encoding.
* z_loaned_slice_t* suffix: The suffix of this encoding. It MUST be a valid UTF-8 string.
*/
_OWNED_TYPE_PTR(_z_encoding_t, encoding)
_LOANED_TYPE(_z_encoding_t, encoding)
_Z_OWNED_TYPE_PTR(_z_encoding_t, encoding)
_Z_LOANED_TYPE(_z_encoding_t, encoding)

/**
* Represents a Zenoh value.
Expand All @@ -210,8 +190,8 @@ _LOANED_TYPE(_z_encoding_t, encoding)
* z_loaned_encoding_t encoding: The encoding of the `payload`.
* z_loaned_bytes_t* payload: The payload of this zenoh value.
*/
_OWNED_TYPE_PTR(_z_value_t, value)
_LOANED_TYPE(_z_value_t, value)
_Z_OWNED_TYPE_PTR(_z_value_t, value)
_Z_LOANED_TYPE(_z_value_t, value)

/**
* Represents the configuration used to configure a subscriber upon declaration :c:func:`z_declare_subscriber`.
Expand Down Expand Up @@ -422,8 +402,8 @@ static inline z_qos_t z_qos_default(void) { return _Z_N_QOS_DEFAULT; }
* z_timestamp_t timestamp: The timestamp of this data sample.
* z_qos_t qos: Quality of service settings used to deliver this sample.
*/
_OWNED_TYPE_RC(_z_sample_rc_t, sample)
_LOANED_TYPE(_z_sample_rc_t, sample)
_Z_OWNED_TYPE_RC(_z_sample_rc_t, sample)
_Z_LOANED_TYPE(_z_sample_rc_t, sample)

/**
* Represents the content of a `hello` message returned by a zenoh entity as a reply to a `scout` message.
Expand All @@ -433,14 +413,14 @@ _LOANED_TYPE(_z_sample_rc_t, sample)
* z_loaned_slice_t* zid: The Zenoh ID of the scouted entity (empty if absent).
* z_loaned_string_array_t locators: The locators of the scouted entity.
*/
_OWNED_TYPE_PTR(_z_hello_t, hello)
_LOANED_TYPE(_z_hello_t, hello)
_Z_OWNED_TYPE_PTR(_z_hello_t, hello)
_Z_LOANED_TYPE(_z_hello_t, hello)

/**
* Represents the reply to a query.
*/
_OWNED_TYPE_RC(_z_reply_rc_t, reply)
_LOANED_TYPE(_z_reply_rc_t, reply)
_Z_OWNED_TYPE_RC(_z_reply_rc_t, reply)
_Z_LOANED_TYPE(_z_reply_rc_t, reply)

/**
* Represents an array of non null-terminated string.
Expand All @@ -451,9 +431,9 @@ _LOANED_TYPE(_z_reply_rc_t, reply)
* - :c:func:`z_string_array_len`
* - :c:func:`z_str_array_array_is_empty`
*/
_OWNED_TYPE_PTR(_z_string_vec_t, string_array)
_LOANED_TYPE(_z_string_vec_t, string_array)
_VIEW_TYPE(_z_string_vec_t, string_array)
_Z_OWNED_TYPE_PTR(_z_string_vec_t, string_array)
_Z_LOANED_TYPE(_z_string_vec_t, string_array)
_Z_VIEW_TYPE(_z_string_vec_t, string_array)

const z_loaned_string_t *z_string_array_get(const z_loaned_string_array_t *a, size_t k);
size_t z_string_array_len(const z_loaned_string_array_t *a);
Expand Down
Loading

0 comments on commit 2f1b8c1

Please sign in to comment.