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