diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/mem.h | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/core/mem.h b/src/core/mem.h index dd6beca..70e8011 100644 --- a/src/core/mem.h +++ b/src/core/mem.h @@ -13,30 +13,27 @@ 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;\ +/*扩容一倍*/ +#define ssrM_scalevector(T, v, curlen) \ +do{ \ + ssr_assert(v); \ + curlen = curlen << 1; \ + v = (T*)realloc(v, sizeof(T)*curlen); \ }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;\ +#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, copy)\ -do{\ -if (curlen >= tarlen) {}\ -else { ssrM_resizevector(T, v, curlen, tarlen, copy); }\ +#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)) |