librpc
object.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2017 Two Pore Guys, Inc.
3  * All rights reserved
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted providing that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
23  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  *
26  */
27 
28 #ifndef LIBRPC_OBJECT_H
29 #define LIBRPC_OBJECT_H
30 
31 #include <stdint.h>
32 #include <stdbool.h>
33 #include <stdarg.h>
34 #include <sys/uio.h>
35 #include <sys/types.h>
36 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 struct rpc_object;
48 
52 typedef enum {
65 #if defined(__linux__)
66  RPC_TYPE_SHMEM,
67 #endif
68 } rpc_type_t;
69 
73 typedef struct rpc_object *rpc_object_t;
74 
85 typedef bool (^rpc_array_applier_t)(size_t index, _Nonnull rpc_object_t value);
86 
90 typedef _Nonnull rpc_object_t (^rpc_array_mapper_t)(size_t index,
91  _Nonnull rpc_object_t value);
92 
104 typedef bool (^rpc_dictionary_applier_t)(const char *_Nonnull key,
105  _Nonnull rpc_object_t value);
106 
110 typedef _Nonnull rpc_object_t (^rpc_dictionary_mapper_t)(
111  const char *_Nonnull key, _Nonnull rpc_object_t value);
112 
127 typedef int (^rpc_array_cmp_t)(_Nonnull rpc_object_t o1,
128  _Nonnull rpc_object_t o2);
129 
137 typedef void (^rpc_binary_destructor_t)(void *_Nullable);
138 
142 #define RPC_ARRAY_APPLIER(_fn, _arg) \
143  ^(size_t _index, rpc_object_t _value) { \
144  return ((bool)_fn(_arg, _index, _value)); \
145  }
146 
150 #define RPC_DICTIONARY_APPLIER(_fn, _arg) \
151  ^(const char *_key, rpc_object_t _value) { \
152  return ((bool)_fn(_arg, _key, _value)); \
153  }
154 
158 #define RPC_ARRAY_CMP(_fn, _arg) \
159  ^(rpc_object_t _o1, rpc_object_t _o2) { \
160  return ((int)_fn(_arg, _o1, _o2)); \
161  }
162 
166 #define RPC_BINARY_DESTRUCTOR(_fn) \
167  ^(void *block) { \
168  _fn(block); \
169  }
170 
174 #define RPC_BINARY_DESTRUCTOR_ARG(_fn, _arg) \
175  ^(void *_block) { \
176  _fn(_arg, _block); \
177  }
178 
179 
189 _Nonnull rpc_object_t rpc_retain(_Nonnull rpc_object_t object);
190 
199 int rpc_release_impl(_Nonnull rpc_object_t object);
200 
209 int rpc_get_refcount(_Nullable rpc_object_t object);
210 
221 size_t rpc_get_line_number(_Nonnull rpc_object_t object);
222 
233 size_t rpc_get_column_number(_Nonnull rpc_object_t object);
234 
241 _Nonnull rpc_object_t rpc_copy(_Nonnull rpc_object_t object);
242 
260 int rpc_cmp(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2);
261 
270 bool rpc_equal(_Nullable rpc_object_t o1, _Nullable rpc_object_t o2);
271 
278 size_t rpc_hash(_Nonnull rpc_object_t object);
279 
290 char *_Nonnull rpc_copy_description(_Nonnull rpc_object_t object);
291 
298 rpc_type_t rpc_get_type(_Nonnull rpc_object_t object);
299 
306 const char *_Nullable rpc_get_type_name(rpc_type_t type);
307 
313 #define rpc_is_error(_object) (rpc_get_type(_object) == RPC_TYPE_ERROR)
314 
323 #define rpc_release(_object) \
324  do { \
325  if (rpc_release_impl(_object) == 0) \
326  (_object) = NULL; \
327  } while(0)
328 
334 #define rpc_swap(_old, _new) \
335  do { \
336  rpc_release(_old); \
337  (_old) = (_new); \
338  } while (0)
339 
345 _Nullable rpc_object_t rpc_get_last_error(void);
346 
434 _Nullable rpc_object_t rpc_object_pack(const char *_Nonnull fmt, ...);
435 
447 _Nullable rpc_object_t rpc_object_vpack(const char *_Nonnull fmt, va_list ap);
448 
519 int rpc_object_unpack(_Nonnull rpc_object_t, const char *_Nonnull fmt, ...);
520 
532 int rpc_object_vunpack(_Nonnull rpc_object_t, const char *_Nonnull fmt,
533  va_list ap);
534 
540 _Nonnull rpc_object_t rpc_null_create(void);
541 
548 _Nonnull rpc_object_t rpc_bool_create(bool value);
549 
559 bool rpc_bool_get_value(_Nonnull rpc_object_t xbool);
560 
567 _Nonnull rpc_object_t rpc_int64_create(int64_t value);
568 
578 int64_t rpc_int64_get_value(_Nonnull rpc_object_t xint);
579 
586 _Nonnull rpc_object_t rpc_uint64_create(uint64_t value);
587 
597 uint64_t rpc_uint64_get_value(_Nonnull rpc_object_t xuint);
598 
605 _Nonnull rpc_object_t rpc_double_create(double value);
606 
616 double rpc_double_get_value(_Nonnull rpc_object_t xdouble);
617 
624 _Nonnull rpc_object_t rpc_date_create(int64_t interval);
625 
631 _Nonnull rpc_object_t rpc_date_create_from_current(void);
632 
642 int64_t rpc_date_get_value(_Nonnull rpc_object_t xdate);
643 
652 _Nonnull rpc_object_t rpc_data_create(const void *_Nullable bytes,
653  size_t length, _Nullable rpc_binary_destructor_t destructor);
654 
663 _Nonnull rpc_object_t rpc_data_create_iov(struct iovec *_Nonnull iov,
664  size_t niov);
665 
672 size_t rpc_data_get_length(_Nonnull rpc_object_t xdata);
673 
680 const void *_Nullable rpc_data_get_bytes_ptr(_Nonnull rpc_object_t xdata);
681 
691 size_t rpc_data_get_bytes(_Nonnull rpc_object_t xdata, void *_Nonnull buffer,
692  size_t off, size_t length);
693 
700 _Nonnull rpc_object_t rpc_string_create(const char *_Nonnull string);
701 
709 _Nonnull rpc_object_t rpc_string_create_len(const char *_Nonnull string,
710  size_t length);
711 
720 _Nonnull rpc_object_t rpc_string_create_with_format(const char *_Nonnull fmt,
721  ...);
722 
731 _Nonnull rpc_object_t rpc_string_create_with_format_and_arguments(
732  const char *_Nonnull fmt, va_list ap);
733 
740 size_t rpc_string_get_length(_Nonnull rpc_object_t xstring);
741 
748 const char *_Nullable rpc_string_get_string_ptr(_Nonnull rpc_object_t xstring);
749 
756 _Nonnull rpc_object_t rpc_fd_create(int fd);
757 
764 int rpc_fd_dup(_Nonnull rpc_object_t xfd);
765 
772 int rpc_fd_get_value(_Nonnull rpc_object_t xfd);
773 
779 _Nonnull rpc_object_t rpc_array_create(void);
780 
790 _Nonnull rpc_object_t rpc_array_create_ex(
791  const _Nonnull rpc_object_t *_Nonnull objects, size_t count,
792  bool steal);
793 
811 void rpc_array_set_value(_Nonnull rpc_object_t array, size_t index,
812  _Nullable rpc_object_t value);
813 
830 void rpc_array_steal_value(_Nonnull rpc_object_t array, size_t index,
831  _Nullable rpc_object_t value);
832 
839 void rpc_array_remove_index(_Nonnull rpc_object_t array, size_t index);
840 
846 void rpc_array_remove_all(_Nonnull rpc_object_t array);
847 
855 void rpc_array_append_value(_Nonnull rpc_object_t array,
856  _Nonnull rpc_object_t value);
857 
864 void rpc_array_append_stolen_value(_Nonnull rpc_object_t array,
865  _Nonnull rpc_object_t value);
866 
876 _Nullable rpc_object_t rpc_array_get_value(_Nonnull rpc_object_t array,
877  size_t index);
878 
885 size_t rpc_array_get_count(_Nonnull rpc_object_t array);
886 
900 bool rpc_array_apply(_Nonnull rpc_object_t array,
901  _Nonnull rpc_array_applier_t applier);
902 
910 void rpc_array_map(_Nonnull rpc_object_t array,
911  _Nonnull rpc_array_mapper_t mapper);
912 
923 bool rpc_array_contains(_Nonnull rpc_object_t array,
924  _Nonnull rpc_object_t value);
925 
934 bool rpc_array_reverse_apply(_Nonnull rpc_object_t array,
935  _Nonnull rpc_array_applier_t applier);
936 
946 void rpc_array_sort(_Nonnull rpc_object_t array,
947  _Nonnull rpc_array_cmp_t comparator);
948 
965 _Nonnull rpc_object_t rpc_array_slice(_Nonnull rpc_object_t array,
966  size_t start, ssize_t len);
967 
979 void rpc_array_set_bool(_Nonnull rpc_object_t array, size_t index, bool value);
980 
992 void rpc_array_set_int64(_Nonnull rpc_object_t array, size_t index,
993  int64_t value);
994 
1006 void rpc_array_set_uint64(_Nonnull rpc_object_t array, size_t index,
1007  uint64_t value);
1008 
1020 void rpc_array_set_double(_Nonnull rpc_object_t array, size_t index,
1021  double value);
1022 
1034 void rpc_array_set_date(_Nonnull rpc_object_t array, size_t index,
1035  int64_t value);
1036 
1049 void rpc_array_set_data(_Nonnull rpc_object_t array, size_t index,
1050  const void *_Nullable bytes,
1051  size_t length);
1052 
1064 void rpc_array_set_string(_Nonnull rpc_object_t array, size_t index,
1065  const char *_Nonnull value);
1066 
1078 void rpc_array_set_fd(_Nonnull rpc_object_t array, size_t index, int value);
1079 
1091 bool rpc_array_get_bool(_Nonnull rpc_object_t array, size_t index);
1092 
1104 int64_t rpc_array_get_int64(_Nonnull rpc_object_t array, size_t index);
1105 
1117 uint64_t rpc_array_get_uint64(_Nonnull rpc_object_t array, size_t index);
1118 
1130 double rpc_array_get_double(_Nonnull rpc_object_t array, size_t index);
1131 
1143 int64_t rpc_array_get_date(_Nonnull rpc_object_t array, size_t index);
1144 
1157 const void *_Nullable rpc_array_get_data(_Nonnull rpc_object_t array,
1158  size_t index, size_t *_Nullable length);
1159 
1171 const char *_Nullable rpc_array_get_string(_Nonnull rpc_object_t array,
1172  size_t index);
1173 
1185 int rpc_array_get_fd(_Nonnull rpc_object_t array, size_t index);
1186 
1198 int rpc_array_dup_fd(_Nonnull rpc_object_t array, size_t index);
1199 
1200 #if defined(__linux__)
1201 
1207 _Nullable rpc_object_t rpc_shmem_create(size_t size);
1208 
1215 void *_Nonnull rpc_shmem_map(_Nonnull rpc_object_t shmem);
1216 
1223 void rpc_shmem_unmap(_Nonnull rpc_object_t shmem, void *_Nonnull addr);
1224 
1231 size_t rpc_shmem_get_size(_Nonnull rpc_object_t shmem);
1232 #endif
1233 
1248 _Nonnull rpc_object_t rpc_error_create(int code, const char *_Nonnull msg,
1249  _Nullable rpc_object_t extra);
1250 
1266 _Nonnull rpc_object_t rpc_error_create_with_stack(int code,
1267  const char *_Nonnull msg, _Nullable rpc_object_t extra,
1268  _Nullable rpc_object_t stack);
1269 
1276 int rpc_error_get_code(_Nonnull rpc_object_t error);
1277 
1284 const char *_Nullable rpc_error_get_message(_Nonnull rpc_object_t error);
1285 
1293 _Nullable rpc_object_t rpc_error_get_extra(_Nonnull rpc_object_t error);
1294 
1301 void rpc_error_set_extra(_Nonnull rpc_object_t error,
1302  _Nonnull rpc_object_t extra);
1303 
1311 _Nullable rpc_object_t rpc_error_get_stack(_Nonnull rpc_object_t error);
1312 
1318 _Nonnull rpc_object_t rpc_dictionary_create(void);
1319 
1330 _Nonnull rpc_object_t rpc_dictionary_create_ex(
1331  const char *const _Nonnull *_Nullable keys,
1332  const _Nonnull rpc_object_t *_Nullable values, size_t count, bool steal);
1333 
1348 void rpc_dictionary_set_value(_Nonnull rpc_object_t dictionary,
1349  const char *_Nonnull key, _Nonnull rpc_object_t value);
1350 
1364 void rpc_dictionary_steal_value(_Nonnull rpc_object_t dictionary,
1365  const char *_Nonnull key, rpc_object_t _Nonnull value);
1366 
1373 void rpc_dictionary_remove_key(_Nonnull rpc_object_t dictionary,
1374  const char *_Nonnull key);
1375 
1381 void rpc_dictionary_remove_all(_Nonnull rpc_object_t dictionary);
1382 
1390 _Nullable rpc_object_t rpc_dictionary_detach_key(
1391  _Nonnull rpc_object_t dictionary, const char *_Nonnull key);
1392 
1402 _Nullable rpc_object_t rpc_dictionary_get_value(
1403  _Nonnull rpc_object_t dictionary, const char *_Nonnull key);
1404 
1411 size_t rpc_dictionary_get_count(_Nonnull rpc_object_t dictionary);
1412 
1426 bool rpc_dictionary_apply(_Nonnull rpc_object_t dictionary,
1427  _Nonnull rpc_dictionary_applier_t applier);
1428 
1434 void rpc_dictionary_map(_Nonnull rpc_object_t dictionary,
1435  _Nonnull rpc_dictionary_mapper_t mapper);
1436 
1444 bool rpc_dictionary_has_key(_Nonnull rpc_object_t dictionary,
1445  const char *_Nonnull key);
1446 
1455 void rpc_dictionary_set_bool(_Nonnull rpc_object_t dictionary,
1456  const char *_Nonnull key, bool value);
1457 
1466 void rpc_dictionary_set_int64(_Nonnull rpc_object_t dictionary,
1467  const char *_Nonnull key, int64_t value);
1468 
1477 void rpc_dictionary_set_uint64(_Nonnull rpc_object_t dictionary,
1478  const char *_Nonnull key, uint64_t value);
1479 
1488 void rpc_dictionary_set_double(_Nonnull rpc_object_t dictionary,
1489  const char *_Nonnull key, double value);
1490 
1499 void rpc_dictionary_set_date(_Nonnull rpc_object_t dictionary,
1500  const char *_Nonnull key, int64_t value);
1501 
1511 void rpc_dictionary_set_data(_Nonnull rpc_object_t dictionary,
1512  const char *_Nonnull key, const void *_Nonnull value, size_t length);
1513 
1522 void rpc_dictionary_set_string(_Nonnull rpc_object_t dictionary,
1523  const char *_Nonnull key, const char *_Nonnull value);
1524 
1533 void rpc_dictionary_set_fd(_Nonnull rpc_object_t dictionary,
1534  const char *_Nonnull key, int value);
1535 
1547 bool rpc_dictionary_get_bool(_Nonnull rpc_object_t dictionary,
1548  const char *_Nonnull key);
1549 
1561 int64_t rpc_dictionary_get_int64(_Nonnull rpc_object_t dictionary,
1562  const char *_Nonnull key);
1563 
1575 uint64_t rpc_dictionary_get_uint64(_Nonnull rpc_object_t dictionary,
1576  const char *_Nonnull key);
1577 
1589 double rpc_dictionary_get_double(_Nonnull rpc_object_t dictionary,
1590  const char *_Nonnull key);
1591 
1603 int64_t rpc_dictionary_get_date(_Nonnull rpc_object_t dictionary,
1604  const char *_Nonnull key);
1605 
1618 const void *_Nullable rpc_dictionary_get_data(_Nonnull rpc_object_t dictionary,
1619  const char *_Nonnull key, size_t *_Nullable length);
1620 
1632 const char *_Nullable rpc_dictionary_get_string(
1633  _Nonnull rpc_object_t dictionary, const char *_Nonnull key);
1634 
1646 int rpc_dictionary_get_fd(_Nonnull rpc_object_t dictionary,
1647  const char *_Nonnull key);
1648 
1660 int rpc_dictionary_dup_fd(_Nonnull rpc_object_t dictionary,
1661  const char *_Nonnull key);
1662 
1669 inline static void __rpc_raii_release(_Nonnull rpc_object_t *_Nullable object)
1670 {
1671  rpc_release_impl(*object);
1672 }
1673 
1678 #define rpc_auto_object_t \
1679  __attribute__((cleanup(__rpc_raii_release))) rpc_object_t
1680 
1681 
1682 #ifdef __cplusplus
1683 }
1684 #endif
1685 
1686 #endif /* LIBRPC_OBJECT_H */
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
Definition: object.h:73
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)
Definition: object.h:85
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)
Definition: object.h:137
_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)
Definition: object.h:127
_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)
rpc_type_t
Definition: object.h:52
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)
Definition: object.h:104
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)