xref: /aosp_15_r20/external/cn-cbor/src/cbor.h (revision 254b1274ba1d768fbd68f5671e61c44001b5d4a8)
1*254b1274SAndroid Build Coastguard Worker #ifndef CBOR_PROTOCOL_H__
2*254b1274SAndroid Build Coastguard Worker #define CBOR_PROTOCOL_H__
3*254b1274SAndroid Build Coastguard Worker 
4*254b1274SAndroid Build Coastguard Worker /* The 8 major types */
5*254b1274SAndroid Build Coastguard Worker #define MT_UNSIGNED 0
6*254b1274SAndroid Build Coastguard Worker #define MT_NEGATIVE 1
7*254b1274SAndroid Build Coastguard Worker #define MT_BYTES    2
8*254b1274SAndroid Build Coastguard Worker #define MT_TEXT     3
9*254b1274SAndroid Build Coastguard Worker #define MT_ARRAY    4
10*254b1274SAndroid Build Coastguard Worker #define MT_MAP      5
11*254b1274SAndroid Build Coastguard Worker #define MT_TAG      6
12*254b1274SAndroid Build Coastguard Worker #define MT_PRIM     7
13*254b1274SAndroid Build Coastguard Worker 
14*254b1274SAndroid Build Coastguard Worker /* The initial bytes resulting from those */
15*254b1274SAndroid Build Coastguard Worker #define IB_UNSIGNED (MT_UNSIGNED << 5)
16*254b1274SAndroid Build Coastguard Worker #define IB_NEGATIVE (MT_NEGATIVE << 5)
17*254b1274SAndroid Build Coastguard Worker #define IB_BYTES    (MT_BYTES << 5)
18*254b1274SAndroid Build Coastguard Worker #define IB_TEXT     (MT_TEXT << 5)
19*254b1274SAndroid Build Coastguard Worker #define IB_ARRAY    (MT_ARRAY << 5)
20*254b1274SAndroid Build Coastguard Worker #define IB_MAP      (MT_MAP << 5)
21*254b1274SAndroid Build Coastguard Worker #define IB_TAG      (MT_TAG << 5)
22*254b1274SAndroid Build Coastguard Worker #define IB_PRIM     (MT_PRIM << 5)
23*254b1274SAndroid Build Coastguard Worker 
24*254b1274SAndroid Build Coastguard Worker #define IB_NEGFLAG (IB_NEGATIVE - IB_UNSIGNED)
25*254b1274SAndroid Build Coastguard Worker #define IB_NEGFLAG_AS_BIT(ib) ((ib) >> 5)
26*254b1274SAndroid Build Coastguard Worker #define IB_TEXTFLAG (IB_TEXT - IB_BYTES)
27*254b1274SAndroid Build Coastguard Worker 
28*254b1274SAndroid Build Coastguard Worker #define IB_AI(ib) ((ib) & 0x1F)
29*254b1274SAndroid Build Coastguard Worker #define IB_MT(ib) ((ib) >> 5)
30*254b1274SAndroid Build Coastguard Worker 
31*254b1274SAndroid Build Coastguard Worker /* Tag numbers handled by this implementation */
32*254b1274SAndroid Build Coastguard Worker #define TAG_TIME_EPOCH 1
33*254b1274SAndroid Build Coastguard Worker #define TAG_BIGNUM     2
34*254b1274SAndroid Build Coastguard Worker #define TAG_BIGNUM_NEG 3
35*254b1274SAndroid Build Coastguard Worker #define TAG_URI        32
36*254b1274SAndroid Build Coastguard Worker #define TAG_RE         35
37*254b1274SAndroid Build Coastguard Worker 
38*254b1274SAndroid Build Coastguard Worker /* Initial bytes of those tag numbers */
39*254b1274SAndroid Build Coastguard Worker #define IB_TIME_EPOCH (IB_TAG | TAG_TIME_EPOCH)
40*254b1274SAndroid Build Coastguard Worker #define IB_BIGNUM     (IB_TAG | TAG_BIGNUM)
41*254b1274SAndroid Build Coastguard Worker #define IB_BIGNUM_NEG (IB_TAG | TAG_BIGNUM_NEG)
42*254b1274SAndroid Build Coastguard Worker /* TAG_URI and TAG_RE are non-immediate tags */
43*254b1274SAndroid Build Coastguard Worker 
44*254b1274SAndroid Build Coastguard Worker /* Simple values handled by this implementation */
45*254b1274SAndroid Build Coastguard Worker #define VAL_FALSE 20
46*254b1274SAndroid Build Coastguard Worker #define VAL_TRUE  21
47*254b1274SAndroid Build Coastguard Worker #define VAL_NIL   22
48*254b1274SAndroid Build Coastguard Worker #define VAL_UNDEF 23
49*254b1274SAndroid Build Coastguard Worker 
50*254b1274SAndroid Build Coastguard Worker /* Initial bytes of those simple values */
51*254b1274SAndroid Build Coastguard Worker #define IB_FALSE (IB_PRIM | VAL_FALSE)
52*254b1274SAndroid Build Coastguard Worker #define IB_TRUE  (IB_PRIM | VAL_TRUE)
53*254b1274SAndroid Build Coastguard Worker #define IB_NIL   (IB_PRIM | VAL_NIL)
54*254b1274SAndroid Build Coastguard Worker #define IB_UNDEF (IB_PRIM | VAL_UNDEF)
55*254b1274SAndroid Build Coastguard Worker 
56*254b1274SAndroid Build Coastguard Worker /* AI values with more data in head */
57*254b1274SAndroid Build Coastguard Worker #define AI_1 24
58*254b1274SAndroid Build Coastguard Worker #define AI_2 25
59*254b1274SAndroid Build Coastguard Worker #define AI_4 26
60*254b1274SAndroid Build Coastguard Worker #define AI_8 27
61*254b1274SAndroid Build Coastguard Worker #define AI_INDEF 31
62*254b1274SAndroid Build Coastguard Worker #define IB_BREAK (IB_PRIM | AI_INDEF)
63*254b1274SAndroid Build Coastguard Worker /* For  */
64*254b1274SAndroid Build Coastguard Worker #define IB_UNUSED (IB_TAG | AI_INDEF)
65*254b1274SAndroid Build Coastguard Worker 
66*254b1274SAndroid Build Coastguard Worker /* Floating point initial bytes */
67*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT2 (IB_PRIM | AI_2)
68*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT4 (IB_PRIM | AI_4)
69*254b1274SAndroid Build Coastguard Worker #define IB_FLOAT8 (IB_PRIM | AI_8)
70*254b1274SAndroid Build Coastguard Worker 
71*254b1274SAndroid Build Coastguard Worker // These definitions are here because they aren't required for the public
72*254b1274SAndroid Build Coastguard Worker // interface, and they were quite confusing in cn-cbor.h
73*254b1274SAndroid Build Coastguard Worker 
74*254b1274SAndroid Build Coastguard Worker #ifdef USE_CBOR_CONTEXT
75*254b1274SAndroid Build Coastguard Worker /**
76*254b1274SAndroid Build Coastguard Worker  * Allocate enough space for 1 `cn_cbor` structure.
77*254b1274SAndroid Build Coastguard Worker  *
78*254b1274SAndroid Build Coastguard Worker  * @param[in]  ctx  The allocation context, or NULL for calloc.
79*254b1274SAndroid Build Coastguard Worker  * @return          A pointer to a `cn_cbor` or NULL on failure
80*254b1274SAndroid Build Coastguard Worker  */
81*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC(ctx) ((ctx) && (ctx)->calloc_func) ? \
82*254b1274SAndroid Build Coastguard Worker     (ctx)->calloc_func(1, sizeof(cn_cbor), (ctx)->context) : \
83*254b1274SAndroid Build Coastguard Worker     calloc(1, sizeof(cn_cbor));
84*254b1274SAndroid Build Coastguard Worker 
85*254b1274SAndroid Build Coastguard Worker /**
86*254b1274SAndroid Build Coastguard Worker  * Free a
87*254b1274SAndroid Build Coastguard Worker  * @param  free_func [description]
88*254b1274SAndroid Build Coastguard Worker  * @return           [description]
89*254b1274SAndroid Build Coastguard Worker  */
90*254b1274SAndroid Build Coastguard Worker #define CN_FREE(ptr, ctx) ((ctx) && (ctx)->free_func) ? \
91*254b1274SAndroid Build Coastguard Worker     (ctx)->free_func((ptr), (ctx)->context) : \
92*254b1274SAndroid Build Coastguard Worker     free((ptr));
93*254b1274SAndroid Build Coastguard Worker 
94*254b1274SAndroid Build Coastguard Worker #define CBOR_CONTEXT_PARAM , context
95*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC_CONTEXT() CN_CALLOC(context)
96*254b1274SAndroid Build Coastguard Worker #define CN_CBOR_FREE_CONTEXT(p) CN_FREE(p, context)
97*254b1274SAndroid Build Coastguard Worker 
98*254b1274SAndroid Build Coastguard Worker #else
99*254b1274SAndroid Build Coastguard Worker 
100*254b1274SAndroid Build Coastguard Worker #define CBOR_CONTEXT_PARAM
101*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC_CONTEXT() CN_CALLOC
102*254b1274SAndroid Build Coastguard Worker #define CN_CBOR_FREE_CONTEXT(p) CN_FREE(p)
103*254b1274SAndroid Build Coastguard Worker 
104*254b1274SAndroid Build Coastguard Worker #ifndef CN_CALLOC
105*254b1274SAndroid Build Coastguard Worker #define CN_CALLOC calloc(1, sizeof(cn_cbor))
106*254b1274SAndroid Build Coastguard Worker #endif
107*254b1274SAndroid Build Coastguard Worker 
108*254b1274SAndroid Build Coastguard Worker #ifndef CN_FREE
109*254b1274SAndroid Build Coastguard Worker #define CN_FREE free
110*254b1274SAndroid Build Coastguard Worker #endif
111*254b1274SAndroid Build Coastguard Worker 
112*254b1274SAndroid Build Coastguard Worker #endif // USE_CBOR_CONTEXT
113*254b1274SAndroid Build Coastguard Worker 
114*254b1274SAndroid Build Coastguard Worker #ifndef UNUSED_PARAM
115*254b1274SAndroid Build Coastguard Worker #define UNUSED_PARAM(p) ((void)&(p))
116*254b1274SAndroid Build Coastguard Worker #endif
117*254b1274SAndroid Build Coastguard Worker 
118*254b1274SAndroid Build Coastguard Worker #endif // CBOR_PROTOCOL_H__
119