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