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

#include <memory.h>

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