00001 #ifndef PROTON_CODEC_H
00002 #define PROTON_CODEC_H 1
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <proton/import_export.h>
00026 #include <proton/object.h>
00027 #include <proton/types.h>
00028 #include <proton/error.h>
00029 #include <proton/type_compat.h>
00030 #include <stdarg.h>
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036 typedef enum {
00037 PN_NULL = 1,
00038 PN_BOOL = 2,
00039 PN_UBYTE = 3,
00040 PN_BYTE = 4,
00041 PN_USHORT = 5,
00042 PN_SHORT = 6,
00043 PN_UINT = 7,
00044 PN_INT = 8,
00045 PN_CHAR = 9,
00046 PN_ULONG = 10,
00047 PN_LONG = 11,
00048 PN_TIMESTAMP = 12,
00049 PN_FLOAT = 13,
00050 PN_DOUBLE = 14,
00051 PN_DECIMAL32 = 15,
00052 PN_DECIMAL64 = 16,
00053 PN_DECIMAL128 = 17,
00054 PN_UUID = 18,
00055 PN_BINARY = 19,
00056 PN_STRING = 20,
00057 PN_SYMBOL = 21,
00058 PN_DESCRIBED = 22,
00059 PN_ARRAY = 23,
00060 PN_LIST = 24,
00061 PN_MAP = 25
00062 } pn_type_t;
00063
00064 PN_EXTERN const char *pn_type_name(pn_type_t type);
00065
00066 typedef struct {
00067 pn_type_t type;
00068 union {
00069 bool as_bool;
00070 uint8_t as_ubyte;
00071 int8_t as_byte;
00072 uint16_t as_ushort;
00073 int16_t as_short;
00074 uint32_t as_uint;
00075 int32_t as_int;
00076 pn_char_t as_char;
00077 uint64_t as_ulong;
00078 int64_t as_long;
00079 pn_timestamp_t as_timestamp;
00080 float as_float;
00081 double as_double;
00082 pn_decimal32_t as_decimal32;
00083 pn_decimal64_t as_decimal64;
00084 pn_decimal128_t as_decimal128;
00085 pn_uuid_t as_uuid;
00086 pn_bytes_t as_bytes;
00087 } u;
00088 } pn_atom_t;
00089
00090
00091
00092 typedef struct pn_data_t pn_data_t;
00093
00094 PN_EXTERN pn_data_t *pn_data(size_t capacity);
00095 PN_EXTERN void pn_data_free(pn_data_t *data);
00096 PN_EXTERN int pn_data_errno(pn_data_t *data);
00097 PN_EXTERN pn_error_t *pn_data_error(pn_data_t *data);
00098 PN_EXTERN int pn_data_vfill(pn_data_t *data, const char *fmt, va_list ap);
00099 PN_EXTERN int pn_data_fill(pn_data_t *data, const char *fmt, ...);
00100 PN_EXTERN int pn_data_vscan(pn_data_t *data, const char *fmt, va_list ap);
00101 PN_EXTERN int pn_data_scan(pn_data_t *data, const char *fmt, ...);
00102
00103 PN_EXTERN void pn_data_clear(pn_data_t *data);
00104 PN_EXTERN size_t pn_data_size(pn_data_t *data);
00105 PN_EXTERN void pn_data_rewind(pn_data_t *data);
00106 PN_EXTERN bool pn_data_next(pn_data_t *data);
00107 PN_EXTERN bool pn_data_prev(pn_data_t *data);
00108 PN_EXTERN bool pn_data_enter(pn_data_t *data);
00109 PN_EXTERN bool pn_data_exit(pn_data_t *data);
00110 PN_EXTERN bool pn_data_lookup(pn_data_t *data, const char *name);
00111
00112 PN_EXTERN pn_type_t pn_data_type(pn_data_t *data);
00113
00114 PN_EXTERN int pn_data_print(pn_data_t *data);
00115 PN_EXTERN int pn_data_format(pn_data_t *data, char *bytes, size_t *size);
00116 PN_EXTERN ssize_t pn_data_encode(pn_data_t *data, char *bytes, size_t size);
00117 PN_EXTERN ssize_t pn_data_decode(pn_data_t *data, const char *bytes, size_t size);
00118
00119 PN_EXTERN int pn_data_put_list(pn_data_t *data);
00120 PN_EXTERN int pn_data_put_map(pn_data_t *data);
00121 PN_EXTERN int pn_data_put_array(pn_data_t *data, bool described, pn_type_t type);
00122 PN_EXTERN int pn_data_put_described(pn_data_t *data);
00123 PN_EXTERN int pn_data_put_null(pn_data_t *data);
00124 PN_EXTERN int pn_data_put_bool(pn_data_t *data, bool b);
00125 PN_EXTERN int pn_data_put_ubyte(pn_data_t *data, uint8_t ub);
00126 PN_EXTERN int pn_data_put_byte(pn_data_t *data, int8_t b);
00127 PN_EXTERN int pn_data_put_ushort(pn_data_t *data, uint16_t us);
00128 PN_EXTERN int pn_data_put_short(pn_data_t *data, int16_t s);
00129 PN_EXTERN int pn_data_put_uint(pn_data_t *data, uint32_t ui);
00130 PN_EXTERN int pn_data_put_int(pn_data_t *data, int32_t i);
00131 PN_EXTERN int pn_data_put_char(pn_data_t *data, pn_char_t c);
00132 PN_EXTERN int pn_data_put_ulong(pn_data_t *data, uint64_t ul);
00133 PN_EXTERN int pn_data_put_long(pn_data_t *data, int64_t l);
00134 PN_EXTERN int pn_data_put_timestamp(pn_data_t *data, pn_timestamp_t t);
00135 PN_EXTERN int pn_data_put_float(pn_data_t *data, float f);
00136 PN_EXTERN int pn_data_put_double(pn_data_t *data, double d);
00137 PN_EXTERN int pn_data_put_decimal32(pn_data_t *data, pn_decimal32_t d);
00138 PN_EXTERN int pn_data_put_decimal64(pn_data_t *data, pn_decimal64_t d);
00139 PN_EXTERN int pn_data_put_decimal128(pn_data_t *data, pn_decimal128_t d);
00140 PN_EXTERN int pn_data_put_uuid(pn_data_t *data, pn_uuid_t u);
00141 PN_EXTERN int pn_data_put_binary(pn_data_t *data, pn_bytes_t bytes);
00142 PN_EXTERN int pn_data_put_string(pn_data_t *data, pn_bytes_t string);
00143 PN_EXTERN int pn_data_put_symbol(pn_data_t *data, pn_bytes_t symbol);
00144 PN_EXTERN int pn_data_put_atom(pn_data_t *data, pn_atom_t atom);
00145
00146 PN_EXTERN size_t pn_data_get_list(pn_data_t *data);
00147 PN_EXTERN size_t pn_data_get_map(pn_data_t *data);
00148 PN_EXTERN size_t pn_data_get_array(pn_data_t *data);
00149 PN_EXTERN bool pn_data_is_array_described(pn_data_t *data);
00150 PN_EXTERN pn_type_t pn_data_get_array_type(pn_data_t *data);
00151 PN_EXTERN bool pn_data_is_described(pn_data_t *data);
00152 PN_EXTERN bool pn_data_is_null(pn_data_t *data);
00153 PN_EXTERN bool pn_data_get_bool(pn_data_t *data);
00154 PN_EXTERN uint8_t pn_data_get_ubyte(pn_data_t *data);
00155 PN_EXTERN int8_t pn_data_get_byte(pn_data_t *data);
00156 PN_EXTERN uint16_t pn_data_get_ushort(pn_data_t *data);
00157 PN_EXTERN int16_t pn_data_get_short(pn_data_t *data);
00158 PN_EXTERN uint32_t pn_data_get_uint(pn_data_t *data);
00159 PN_EXTERN int32_t pn_data_get_int(pn_data_t *data);
00160 PN_EXTERN pn_char_t pn_data_get_char(pn_data_t *data);
00161 PN_EXTERN uint64_t pn_data_get_ulong(pn_data_t *data);
00162 PN_EXTERN int64_t pn_data_get_long(pn_data_t *data);
00163 PN_EXTERN pn_timestamp_t pn_data_get_timestamp(pn_data_t *data);
00164 PN_EXTERN float pn_data_get_float(pn_data_t *data);
00165 PN_EXTERN double pn_data_get_double(pn_data_t *data);
00166 PN_EXTERN pn_decimal32_t pn_data_get_decimal32(pn_data_t *data);
00167 PN_EXTERN pn_decimal64_t pn_data_get_decimal64(pn_data_t *data);
00168 PN_EXTERN pn_decimal128_t pn_data_get_decimal128(pn_data_t *data);
00169 PN_EXTERN pn_uuid_t pn_data_get_uuid(pn_data_t *data);
00170 PN_EXTERN pn_bytes_t pn_data_get_binary(pn_data_t *data);
00171 PN_EXTERN pn_bytes_t pn_data_get_string(pn_data_t *data);
00172 PN_EXTERN pn_bytes_t pn_data_get_symbol(pn_data_t *data);
00173 PN_EXTERN pn_bytes_t pn_data_get_bytes(pn_data_t *data);
00174 PN_EXTERN pn_atom_t pn_data_get_atom(pn_data_t *data);
00175
00176 PN_EXTERN int pn_data_copy(pn_data_t *data, pn_data_t *src);
00177 PN_EXTERN int pn_data_append(pn_data_t *data, pn_data_t *src);
00178 PN_EXTERN int pn_data_appendn(pn_data_t *data, pn_data_t *src, int limit);
00179 PN_EXTERN void pn_data_narrow(pn_data_t *data);
00180 PN_EXTERN void pn_data_widen(pn_data_t *data);
00181 PN_EXTERN pn_handle_t pn_data_point(pn_data_t *data);
00182 PN_EXTERN bool pn_data_restore(pn_data_t *data, pn_handle_t point);
00183
00184
00185 PN_EXTERN void pn_data_dump(pn_data_t *data);
00186
00187 #ifdef __cplusplus
00188 }
00189 #endif
00190
00191 #endif