1 /*
2 copyright
3 	Steve Dekorte, 2004
4 license
5 	BSD revised
6 description
7 	A Binary Stream that supports tagged items.
8 */
9 
10 #ifndef BSTREAM_DEFINED
11 #define BSTREAM_DEFINED 1
12 
13 #include "Common.h"
14 #include "UArray.h"
15 #include "BStreamTag.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 //typedef struct UArray UArray;
22 
23 typedef struct
24 {
25 	UArray *ba;
26 	size_t index;
27 	unsigned char ownsUArray;
28 	UArray *tmp;
29 	UArray *errorBa;
30 	int flipEndian;
31 	unsigned char *typeBuf;
32 } BStream;
33 
34 /*
35 #define BStream_ba_(self, v) self->ba = v;
36 #define BStream_ba(self) (self->ba)
37 
38 #define BStream_index_(self, v) self->index = v;
39 #define BStream_index(self) (self->index)
40 
41 #define BStream_ownsUArray_(self, v) self->ownsUArray = v;
42 #define BStream_ownsUArray(self) (self->ownsUArray)
43 
44 #define BStream_tmp_(self, v) self->tmp = v;
45 #define BStream_tmp(self) (self->tmp)
46 
47 #define BStream_errorBa_(self, v) self->errorBa = v;
48 #define BStream_errorBa(self) (self->errorBa)
49 
50 #define BStream_flipEndian_(self, v) self->flipEndian = v;
51 #define BStream_flipEndian(self) (self->flipEndian)
52 
53 #define BStream_typeBuf_(self, v) self->typeBuf = v;
54 #define BStream_typeBufs(self) (self->typeBuf)
55 */
56 
57 BASEKIT_API BStream *BStream_new(void);
58 BASEKIT_API BStream *BStream_clone(BStream *self);
59 BASEKIT_API void BStream_free(BStream *self);
60 
61 BASEKIT_API char *BStream_errorString(BStream *self);
62 BASEKIT_API void BStream_setUArray_(BStream *self, UArray *ba);
63 BASEKIT_API void BStream_setData_length_(BStream *self, unsigned char *data, size_t length);
64 BASEKIT_API UArray *BStream_byteArray(BStream *self);
65 BASEKIT_API void BStream_empty(BStream *self);
66 BASEKIT_API int BStream_isEmpty(BStream *self);
67 
68 // writing --------------------------------------
69 
70 BASEKIT_API void BStream_writeByte_(BStream *self, unsigned char v);
71 
72 BASEKIT_API void BStream_writeUint8_(BStream *self, uint8_t v);
73 BASEKIT_API void BStream_writeUint32_(BStream *self, uint32_t v);
74 BASEKIT_API void BStream_writeInt32_(BStream *self, int32_t v);
75 #if !defined(__SYMBIAN32__)
76 BASEKIT_API void BStream_writeInt64_(BStream *self, int64_t v);
77 #endif
78 BASEKIT_API void BStream_writeDouble_(BStream *self, double v);
79 BASEKIT_API void BStream_writeData_length_(BStream *self, const unsigned char *data, size_t length);
80 BASEKIT_API void BStream_writeCString_(BStream *self, const char *s);
81 BASEKIT_API void BStream_writeUArray_(BStream *self, UArray *ba);
82 
83 // reading --------------------------------------
84 
85 BASEKIT_API unsigned char BStream_readByte(BStream *self);
86 
87 BASEKIT_API uint8_t BStream_readUint8(BStream *self);
88 BASEKIT_API uint32_t BStream_readUint32(BStream *self);
89 BASEKIT_API int32_t BStream_readInt32(BStream *self);
90 #if !defined(__SYMBIAN32__)
91 BASEKIT_API int64_t BStream_readInt64(BStream *self);
92 #endif
93 BASEKIT_API double BStream_readDouble(BStream *self);
94 BASEKIT_API uint8_t *BStream_readDataOfLength_(BStream *self, size_t length);
95 BASEKIT_API void BStream_readUArray_(BStream *self, UArray *b);
96 BASEKIT_API UArray *BStream_readUArray(BStream *self);
97 BASEKIT_API const char *BStream_readCString(BStream *self);
98 
99 // tagged writing --------------------------------------
100 
101 BASEKIT_API void BStream_writeTaggedUint8_(BStream *self, uint8_t v);
102 BASEKIT_API void BStream_writeTaggedUint32_(BStream *self, uint32_t v);
103 BASEKIT_API void BStream_writeTaggedInt32_(BStream *self, int32_t v);
104 #if !defined(__SYMBIAN32__)
105 BASEKIT_API void BStream_writeTaggedInt64_(BStream *self, int64_t v);
106 #endif
107 BASEKIT_API void BStream_writeTaggedDouble_(BStream *self, double v);
108 BASEKIT_API void BStream_writeTaggedData_length_(BStream *self, const unsigned char *data, size_t length);
109 BASEKIT_API void BStream_writeTaggedCString_(BStream *self, const char *s);
110 BASEKIT_API void BStream_writeTaggedUArray_(BStream *self, UArray *ba);
111 
112 // tagged reading --------------------------------------
113 
114 BASEKIT_API uint8_t BStream_readTaggedUint8(BStream *self);
115 BASEKIT_API uint32_t BStream_readTaggedUint32(BStream *self);
116 BASEKIT_API int32_t BStream_readTaggedInt32(BStream *self);
117 #if !defined(__SYMBIAN32__)
118 BASEKIT_API int64_t BStream_readTaggedInt64(BStream *self);
119 #endif
120 BASEKIT_API double BStream_readTaggedDouble(BStream *self);
121 BASEKIT_API void BStream_readTaggedUArray_(BStream *self, UArray *b);
122 BASEKIT_API UArray *BStream_readTaggedUArray(BStream *self);
123 BASEKIT_API const char *BStream_readTaggedCString(BStream *self);
124 
125 BASEKIT_API void BStream_show(BStream *self);
126 
127 #ifdef __cplusplus
128 }
129 #endif
130 #endif
131 
132