diff options
Diffstat (limited to 'src/core/mem.h')
-rw-r--r-- | src/core/mem.h | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/core/mem.h b/src/core/mem.h index 1a763f9..e6cc714 100644 --- a/src/core/mem.h +++ b/src/core/mem.h @@ -3,10 +3,6 @@ #include <memory.h> -/* -** 内存分配相关 -*/ - void ssrM_freemem(); void ssrM_realloc(); @@ -15,6 +11,32 @@ void ssrM_realloc(); #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
\ No newline at end of file |