From 3df29dc54c509c983dc8a0e23eab4160d48144f2 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 8 Dec 2019 00:23:50 +0800 Subject: +clipping --- src/core/mem.h | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/core/mem.h') 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 -/* -** 内存分配相关 -*/ - 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 -- cgit v1.1-26-g67d0