28 #ifndef LIBRPC_OBJECT_H 29 #define LIBRPC_OBJECT_H 35 #include <sys/types.h> 65 #if defined(__linux__) 90 typedef _Nonnull
rpc_object_t (^rpc_array_mapper_t)(
size_t index,
91 _Nonnull rpc_object_t value);
105 _Nonnull rpc_object_t value);
110 typedef _Nonnull
rpc_object_t (^rpc_dictionary_mapper_t)(
111 const char *_Nonnull key, _Nonnull rpc_object_t value);
128 _Nonnull rpc_object_t o2);
142 #define RPC_ARRAY_APPLIER(_fn, _arg) \ 143 ^(size_t _index, rpc_object_t _value) { \ 144 return ((bool)_fn(_arg, _index, _value)); \ 150 #define RPC_DICTIONARY_APPLIER(_fn, _arg) \ 151 ^(const char *_key, rpc_object_t _value) { \ 152 return ((bool)_fn(_arg, _key, _value)); \ 158 #define RPC_ARRAY_CMP(_fn, _arg) \ 159 ^(rpc_object_t _o1, rpc_object_t _o2) { \ 160 return ((int)_fn(_arg, _o1, _o2)); \ 166 #define RPC_BINARY_DESTRUCTOR(_fn) \ 174 #define RPC_BINARY_DESTRUCTOR_ARG(_fn, _arg) \ 189 _Nonnull rpc_object_t
rpc_retain(_Nonnull rpc_object_t
object);
241 _Nonnull rpc_object_t
rpc_copy(_Nonnull rpc_object_t
object);
260 int rpc_cmp(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2);
270 bool rpc_equal(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2);
278 size_t rpc_hash(_Nonnull rpc_object_t
object);
313 #define rpc_is_error(_object) (rpc_get_type(_object) == RPC_TYPE_ERROR) 323 #define rpc_release(_object) \ 325 if (rpc_release_impl(_object) == 0) \ 334 #define rpc_swap(_old, _new) \ 447 _Nullable rpc_object_t
rpc_object_vpack(
const char *_Nonnull fmt, va_list ap);
692 size_t off,
size_t length);
732 const char *_Nonnull fmt, va_list ap);
791 const _Nonnull rpc_object_t *_Nonnull objects,
size_t count,
812 _Nullable rpc_object_t value);
831 _Nullable rpc_object_t value);
856 _Nonnull rpc_object_t value);
865 _Nonnull rpc_object_t value);
911 _Nonnull rpc_array_mapper_t mapper);
924 _Nonnull rpc_object_t value);
966 size_t start, ssize_t len);
1050 const void *_Nullable bytes,
1065 const char *_Nonnull value);
1078 void rpc_array_set_fd(_Nonnull rpc_object_t array,
size_t index,
int value);
1158 size_t index,
size_t *_Nullable length);
1200 #if defined(__linux__) 1207 _Nullable rpc_object_t rpc_shmem_create(
size_t size);
1215 void *_Nonnull rpc_shmem_map(_Nonnull rpc_object_t shmem);
1223 void rpc_shmem_unmap(_Nonnull rpc_object_t shmem,
void *_Nonnull addr);
1231 size_t rpc_shmem_get_size(_Nonnull rpc_object_t shmem);
1249 _Nullable rpc_object_t extra);
1267 const char *_Nonnull msg, _Nullable rpc_object_t extra,
1268 _Nullable rpc_object_t stack);
1302 _Nonnull rpc_object_t extra);
1331 const char *
const _Nonnull *_Nullable keys,
1332 const _Nonnull rpc_object_t *_Nullable values,
size_t count,
bool steal);
1349 const char *_Nonnull key, _Nonnull rpc_object_t value);
1365 const char *_Nonnull key, rpc_object_t _Nonnull value);
1374 const char *_Nonnull key);
1391 _Nonnull rpc_object_t dictionary,
const char *_Nonnull key);
1403 _Nonnull rpc_object_t dictionary,
const char *_Nonnull key);
1435 _Nonnull rpc_dictionary_mapper_t mapper);
1445 const char *_Nonnull key);
1456 const char *_Nonnull key,
bool value);
1467 const char *_Nonnull key, int64_t value);
1478 const char *_Nonnull key, uint64_t value);
1489 const char *_Nonnull key,
double value);
1500 const char *_Nonnull key, int64_t value);
1512 const char *_Nonnull key,
const void *_Nonnull value,
size_t length);
1523 const char *_Nonnull key,
const char *_Nonnull value);
1534 const char *_Nonnull key,
int value);
1548 const char *_Nonnull key);
1562 const char *_Nonnull key);
1576 const char *_Nonnull key);
1590 const char *_Nonnull key);
1604 const char *_Nonnull key);
1619 const char *_Nonnull key,
size_t *_Nullable length);
1633 _Nonnull rpc_object_t dictionary,
const char *_Nonnull key);
1647 const char *_Nonnull key);
1661 const char *_Nonnull key);
1669 inline static void __rpc_raii_release(_Nonnull rpc_object_t *_Nullable
object)
1678 #define rpc_auto_object_t \ 1679 __attribute__((cleanup(__rpc_raii_release))) rpc_object_t void rpc_array_remove_all(_Nonnull rpc_object_t array)
_Nonnull rpc_object_t rpc_int64_create(int64_t value)
_Nullable rpc_object_t rpc_dictionary_detach_key(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
bool rpc_dictionary_get_bool(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
rpc_type_t rpc_get_type(_Nonnull rpc_object_t object)
void rpc_dictionary_remove_all(_Nonnull rpc_object_t dictionary)
_Nullable rpc_object_t rpc_error_get_extra(_Nonnull rpc_object_t error)
_Nonnull rpc_object_t rpc_retain(_Nonnull rpc_object_t object)
_Nonnull rpc_object_t rpc_data_create_iov(struct iovec *_Nonnull iov, size_t niov)
void rpc_array_set_data(_Nonnull rpc_object_t array, size_t index, const void *_Nullable bytes, size_t length)
int rpc_object_unpack(_Nonnull rpc_object_t, const char *_Nonnull fmt,...)
struct rpc_object * rpc_object_t
void rpc_array_set_fd(_Nonnull rpc_object_t array, size_t index, int value)
int64_t rpc_int64_get_value(_Nonnull rpc_object_t xint)
uint64_t rpc_uint64_get_value(_Nonnull rpc_object_t xuint)
_Nonnull rpc_object_t rpc_string_create(const char *_Nonnull string)
double rpc_double_get_value(_Nonnull rpc_object_t xdouble)
bool rpc_bool_get_value(_Nonnull rpc_object_t xbool)
_Nonnull rpc_object_t rpc_array_create_ex(const _Nonnull rpc_object_t *_Nonnull objects, size_t count, bool steal)
bool(^ rpc_array_applier_t)(size_t index, _Nonnull rpc_object_t value)
void rpc_array_set_int64(_Nonnull rpc_object_t array, size_t index, int64_t value)
int rpc_error_get_code(_Nonnull rpc_object_t error)
_Nonnull rpc_object_t rpc_bool_create(bool value)
size_t rpc_data_get_length(_Nonnull rpc_object_t xdata)
_Nullable rpc_object_t rpc_object_pack(const char *_Nonnull fmt,...)
size_t rpc_dictionary_get_count(_Nonnull rpc_object_t dictionary)
void rpc_array_set_date(_Nonnull rpc_object_t array, size_t index, int64_t value)
size_t rpc_hash(_Nonnull rpc_object_t object)
const void *_Nullable rpc_array_get_data(_Nonnull rpc_object_t array, size_t index, size_t *_Nullable length)
int rpc_release_impl(_Nonnull rpc_object_t object)
int rpc_get_refcount(_Nullable rpc_object_t object)
void(^ rpc_binary_destructor_t)(void *_Nullable)
_Nonnull rpc_object_t rpc_double_create(double value)
size_t rpc_string_get_length(_Nonnull rpc_object_t xstring)
size_t rpc_get_column_number(_Nonnull rpc_object_t object)
_Nonnull rpc_object_t rpc_error_create(int code, const char *_Nonnull msg, _Nullable rpc_object_t extra)
const void *_Nullable rpc_dictionary_get_data(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, size_t *_Nullable length)
int rpc_fd_get_value(_Nonnull rpc_object_t xfd)
void rpc_array_steal_value(_Nonnull rpc_object_t array, size_t index, _Nullable rpc_object_t value)
_Nullable rpc_object_t rpc_error_get_stack(_Nonnull rpc_object_t error)
_Nonnull rpc_object_t rpc_uint64_create(uint64_t value)
uint64_t rpc_array_get_uint64(_Nonnull rpc_object_t array, size_t index)
int rpc_cmp(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2)
size_t rpc_array_get_count(_Nonnull rpc_object_t array)
_Nonnull rpc_object_t rpc_copy(_Nonnull rpc_object_t object)
uint64_t rpc_dictionary_get_uint64(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
_Nonnull rpc_object_t rpc_array_slice(_Nonnull rpc_object_t array, size_t start, ssize_t len)
_Nonnull rpc_object_t rpc_string_create_with_format_and_arguments(const char *_Nonnull fmt, va_list ap)
void rpc_array_append_stolen_value(_Nonnull rpc_object_t array, _Nonnull rpc_object_t value)
const void *_Nullable rpc_data_get_bytes_ptr(_Nonnull rpc_object_t xdata)
void rpc_dictionary_remove_key(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
bool rpc_array_reverse_apply(_Nonnull rpc_object_t array, _Nonnull rpc_array_applier_t applier)
void rpc_array_remove_index(_Nonnull rpc_object_t array, size_t index)
size_t rpc_get_line_number(_Nonnull rpc_object_t object)
int(^ rpc_array_cmp_t)(_Nonnull rpc_object_t o1, _Nonnull rpc_object_t o2)
_Nonnull rpc_object_t rpc_data_create(const void *_Nullable bytes, size_t length, _Nullable rpc_binary_destructor_t destructor)
int rpc_array_dup_fd(_Nonnull rpc_object_t array, size_t index)
void rpc_array_append_value(_Nonnull rpc_object_t array, _Nonnull rpc_object_t value)
_Nonnull rpc_object_t rpc_dictionary_create_ex(const char *const _Nonnull *_Nullable keys, const _Nonnull rpc_object_t *_Nullable values, size_t count, bool steal)
_Nonnull rpc_object_t rpc_array_create(void)
char *_Nonnull rpc_copy_description(_Nonnull rpc_object_t object)
_Nullable rpc_object_t rpc_object_vpack(const char *_Nonnull fmt, va_list ap)
void rpc_dictionary_steal_value(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, rpc_object_t _Nonnull value)
void rpc_dictionary_set_data(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, const void *_Nonnull value, size_t length)
_Nonnull rpc_object_t rpc_string_create_with_format(const char *_Nonnull fmt,...)
int64_t rpc_array_get_int64(_Nonnull rpc_object_t array, size_t index)
bool rpc_array_contains(_Nonnull rpc_object_t array, _Nonnull rpc_object_t value)
_Nonnull rpc_object_t rpc_string_create_len(const char *_Nonnull string, size_t length)
const char *_Nullable rpc_error_get_message(_Nonnull rpc_object_t error)
_Nonnull rpc_object_t rpc_null_create(void)
_Nullable rpc_object_t rpc_dictionary_get_value(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
void rpc_error_set_extra(_Nonnull rpc_object_t error, _Nonnull rpc_object_t extra)
void rpc_array_set_string(_Nonnull rpc_object_t array, size_t index, const char *_Nonnull value)
bool rpc_equal(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2)
void rpc_array_sort(_Nonnull rpc_object_t array, _Nonnull rpc_array_cmp_t comparator)
_Nullable rpc_object_t rpc_get_last_error(void)
bool rpc_dictionary_apply(_Nonnull rpc_object_t dictionary, _Nonnull rpc_dictionary_applier_t applier)
_Nonnull rpc_object_t rpc_error_create_with_stack(int code, const char *_Nonnull msg, _Nullable rpc_object_t extra, _Nullable rpc_object_t stack)
int64_t rpc_dictionary_get_int64(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
_Nonnull rpc_object_t rpc_date_create(int64_t interval)
void rpc_array_set_value(_Nonnull rpc_object_t array, size_t index, _Nullable rpc_object_t value)
bool rpc_array_get_bool(_Nonnull rpc_object_t array, size_t index)
int64_t rpc_dictionary_get_date(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
int rpc_dictionary_get_fd(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
double rpc_array_get_double(_Nonnull rpc_object_t array, size_t index)
void rpc_array_set_double(_Nonnull rpc_object_t array, size_t index, double value)
int64_t rpc_date_get_value(_Nonnull rpc_object_t xdate)
void rpc_dictionary_set_fd(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, int value)
void rpc_dictionary_set_string(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, const char *_Nonnull value)
void rpc_dictionary_set_uint64(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, uint64_t value)
double rpc_dictionary_get_double(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
void rpc_array_set_bool(_Nonnull rpc_object_t array, size_t index, bool value)
const char *_Nullable rpc_string_get_string_ptr(_Nonnull rpc_object_t xstring)
_Nonnull rpc_object_t rpc_fd_create(int fd)
bool rpc_dictionary_has_key(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
_Nonnull rpc_object_t rpc_dictionary_create(void)
int rpc_dictionary_dup_fd(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
const char *_Nullable rpc_dictionary_get_string(_Nonnull rpc_object_t dictionary, const char *_Nonnull key)
void rpc_dictionary_set_bool(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, bool value)
void rpc_array_set_uint64(_Nonnull rpc_object_t array, size_t index, uint64_t value)
void rpc_dictionary_set_value(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, _Nonnull rpc_object_t value)
_Nullable rpc_object_t rpc_array_get_value(_Nonnull rpc_object_t array, size_t index)
int64_t rpc_array_get_date(_Nonnull rpc_object_t array, size_t index)
bool rpc_array_apply(_Nonnull rpc_object_t array, _Nonnull rpc_array_applier_t applier)
size_t rpc_data_get_bytes(_Nonnull rpc_object_t xdata, void *_Nonnull buffer, size_t off, size_t length)
_Nonnull rpc_object_t rpc_date_create_from_current(void)
void rpc_dictionary_map(_Nonnull rpc_object_t dictionary, _Nonnull rpc_dictionary_mapper_t mapper)
int rpc_object_vunpack(_Nonnull rpc_object_t, const char *_Nonnull fmt, va_list ap)
void rpc_dictionary_set_date(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, int64_t value)
const char *_Nullable rpc_array_get_string(_Nonnull rpc_object_t array, size_t index)
bool(^ rpc_dictionary_applier_t)(const char *_Nonnull key, _Nonnull rpc_object_t value)
int rpc_fd_dup(_Nonnull rpc_object_t xfd)
void rpc_array_map(_Nonnull rpc_object_t array, _Nonnull rpc_array_mapper_t mapper)
void rpc_dictionary_set_double(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, double value)
void rpc_dictionary_set_int64(_Nonnull rpc_object_t dictionary, const char *_Nonnull key, int64_t value)
int rpc_array_get_fd(_Nonnull rpc_object_t array, size_t index)
const char *_Nullable rpc_get_type_name(rpc_type_t type)