-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpairarr.h
57 lines (45 loc) · 1.41 KB
/
pairarr.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
#ifndef ZAKAROUF__ZTYPES_TYPES__PAIRARR_H
#define ZAKAROUF__ZTYPES_TYPES__PAIRARR_H
#include "std/primitives.h"
#include "std/mem.h"
#define z__PairArr(Ta, Tb)\
struct {\
Ta *data_a;\
Tb *data_b;\
z__u32 len, lenUsed;\
}
#define z__PairArr_new(pa, _len)\
{\
(pa)->len = _len;\
(pa)->data_a = z__MALLOC(sizeof(*(pa)->data_a) * (pa)->len);\
(pa)->data_b = z__MALLOC(sizeof(*(pa)->data_b) * (pa)->len);\
(pa)->lenUsed = 0;\
}
#define z__PairArr_delete(pa)\
{\
z__FREE((pa)->data_a);\
(pa)->lenUsed = 0;\
(pa)->len = 0;\
}
#define z__PairArr_expand(pa, by)\
{\
(pa)->len += by;\
(pa)->data_a = z__REALLOC((pa)->data_a, sizeof(*(pa)->data_a) * (pa)->len);\
(pa)->data_b = z__REALLOC((pa)->data_b, sizeof(*(pa)->data_b) * (pa)->len);\
}
#define z__PairArr_expand_iffull(pa)\
{\
if((pa)->lenUsed >= (pa)->len) { z__PairArr_expand(pa, (pa)->len); }\
}
#define z__PairArr_push_nocheck(pa, Va, Vb) \
{ \
(pa)->data_a[(pa)->lenUsed] = Va; \
(pa)->data_b[(pa)->lenUsed] = Vb; \
(pa)->lenUsed += 1; \
}
#define z__PairArr_push(pa, Va, Vb) \
{ \
z__PairArr_expand_iffull(pa); \
z__PairArr_push_nocheck(pa, Va, Vb); \
}
#endif