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