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