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

#include <memory.h>

void ssrM_freemem();
void ssrM_realloc();

#define ssrM_copy memcpy

#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)

/*À©ÈÝÒ»±¶*/
#define ssrM_scalevector(T, v, curlen) \
do{																		  \
	ssr_assert(v);												\
	curlen = curlen << 1;									\
	v = (T*)realloc(v, sizeof(T)*curlen);	\
}while(0)

#define ssrM_resizevector(T, v, curlen, tarlen) \
do {																			\
	if(!v)																	\
		v = (T*)calloc(tarlen, sizeof(T));		\
	else																		\
		v = (T*)realloc(v, sizeof(T)*tarlen);	\
	curlen = tarlen;												\
}while(0)

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

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

#endif