-
Notifications
You must be signed in to change notification settings - Fork 6
/
jhlib.h
106 lines (91 loc) · 3.55 KB
/
jhlib.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
typedef unsigned long long uint64;
typedef signed long long sint64;
typedef unsigned int uint32;
typedef signed int sint32;
typedef unsigned short uint16;
typedef signed short sint16;
typedef unsigned char uint8;
typedef signed char sint8;
typedef struct
{
void** objects;
uint32 objectCount;
uint32 objectLimit;
uint32 stepScaler;
bool isPreallocated;
bool doNotFreeRawData;
}simpleList_t;
simpleList_t* simpleList_create(sint32 initialLimit);
void simpleList_create(simpleList_t* simpleList, sint32 initialLimit);
void simpleList_create(simpleList_t* simpleList, sint32 initialLimit, void** rawArray);
void simpleList_free(simpleList_t* simpleList);
void simpleList_add(simpleList_t* simpleList, void* object);
void simpleList_addUnique(simpleList_t* simpleList, void* object);
bool simpleList_addUniqueFeedback(simpleList_t* simpleList, void* object);
bool simpleList_remove(simpleList_t* simpleList, void* object);
void* simpleList_get(simpleList_t* simpleList, sint32 index);
typedef struct _stream_t stream_t;
typedef struct
{
uint32 (*readData)(void *object, void *buffer, uint32 len);
uint32 (*writeData)(void *object, void *buffer, uint32 len);
uint32 (*getSize)(void *object);
void (*setSize)(void *object, uint32 size);
uint32 (*getSeek)(void *object);
void (*setSeek)(void *object, sint32 seek, bool relative);
void (*initStream)(void *object, stream_t *stream);
void (*destroyStream)(void *object, stream_t *stream);
// general settings
bool allowCaching;
}streamSettings_t;
typedef struct _stream_t
{
void *object;
//_stream_t *substream;
streamSettings_t *settings;
// bit access ( write )
uint8 bitBuffer[8];
uint8 bitIndex;
// bit access ( read )
uint8 bitReadBuffer[8];
uint8 bitReadBufferState;
uint8 bitReadIndex;
}stream_t;
stream_t* stream_create (streamSettings_t *settings, void *object);
void stream_destroy (stream_t *stream);
// stream reading
char stream_readS8(stream_t *stream);
short stream_readS16(stream_t *stream);
int stream_readS32(stream_t *stream);
uint8 stream_readU8(stream_t *stream);
uint16 stream_readU16(stream_t *stream);
uint32 stream_readU32(stream_t *stream);
unsigned long long stream_readU64(stream_t *stream);
float stream_readFloat(stream_t *stream);
uint32 stream_readData(stream_t *stream, void *data, int len);
// stream writing
void stream_writeS8(stream_t *stream, char value);
void stream_writeS16(stream_t *stream, short value);
void stream_writeS32(stream_t *stream, int value);
void stream_writeU8(stream_t *stream, uint8 value);
void stream_writeU16(stream_t *stream, uint16 value);
void stream_writeU32(stream_t *stream, uint32 value);
void stream_writeFloat(stream_t *stream, float value);
uint32 stream_writeData(stream_t *stream, void *data, int len);
// stream other
void stream_setSeek(stream_t *stream, uint32 seek);
uint32 stream_getSeek(stream_t *stream);
uint32 stream_getSize(stream_t *stream);
void stream_setSize(stream_t *stream, uint32 size);
void stream_skipData(stream_t *stream, int len);
uint32 stream_copy(stream_t* dest, stream_t* source, uint32 length);
// bit operations
void stream_writeBits(stream_t* stream, uint8* bitData, uint32 bitCount);
void stream_readBits(stream_t* stream, uint8* bitData, uint32 bitCount);
/* stream ex */
stream_t* streamEx_fromMemoryRange(void *mem, uint32 memoryLimit);
stream_t* streamEx_fromDynamicMemoryRange(uint32 memoryLimit);
stream_t* streamEx_createSubstream(stream_t* mainstream, sint32 startOffset, sint32 size);
// misc
void* streamEx_map(stream_t* stream, sint32* size);
sint32 streamEx_readStringNT(stream_t* stream, char* str, uint32 strSize);