summaryrefslogtreecommitdiff
path: root/src/core/mem.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/mem.h')
-rw-r--r--src/core/mem.h37
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))