summaryrefslogtreecommitdiff
path: root/src/core/mem.h
blob: e6cc714b3576a1dc8658a295396568e548f5c07b (plain)
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
#ifndef _SOFTSHADEROOM_MEM_H_ 
#define _SOFTSHADEROOM_MEM_H_ 

#include <memory.h>

void ssrM_freemem();
void ssrM_realloc();

#define ssrM_zero(obj, size) memset(obj, 0, size)
#define ssrM_new(T) (T*)malloc(sizeof(T)) 
#define ssrM_newvector(T, c) ((T*)calloc(c, sizeof(T)))
#define ssrM_free(obj) free(obj)

/*vectorÀ©ÈÝÁ½±¶*/
#define ssrM_scalevector(T, v, curlen, copy) \
do{\
ssr_assert(v);\
T* t = (T*)calloc(curlen << 1, sizeof(T));\
if (copy) memcpy(t, v, curlen * sizeof(T));\
free(v);\
v = t;\
}while(0)

/*ÖØÉèvectorÈÝÁ¿*/
#define ssrM_resizevector(T, v, curlen, tarlen, copy) \
do {\
T* t = (T*)calloc(tarlen, sizeof(T));\
if (v && copy) memcpy(t, v, min(curlen, tarlen)* sizeof(T));\
if (v) free(v);\
v = t;\
curlen = tarlen;\
}while(0)

#define ssrM_rescalevector(T, v, curlen, tarlen, copy)\
do{\
if (curlen >= tarlen) {}\
else { ssrM_resizevector(T, v, curlen, tarlen, copy); }\
} while (0)

#define cast(v, T) (*(T*)(&v))

#endif