EXPECTED_SIZE can be overloaded by oplist now.

This commit is contained in:
Patrick Pelissier committed 2017-03-23 21:51:31 +01:00
1 parent fdd7f9d19d
commit 32d22fef51
2 files changed
+10 -7

No files matched your search

+8 -7
View File
@@ -84,8 +84,9 @@
)
// Compute alloc from the requested size.
#define ARRAYI_EXPECTED_SIZE 8
#define ARRAYI_INC_ALLOC_SIZE(n) (M_MAX(ARRAYI_EXPECTED_SIZE, (n))*2)
// NOTE: EXPECTED_SIZE can be overloaded by the given oplist.
#define ARRAYI_INC_ALLOC_SIZE(oplist, n) \
(M_MAX(M_GET_EXPECTED_SIZE oplist, (n))*2)
// Internal definition.
#define ARRAYI_DEF2(name, type, oplist) \
@@ -149,7 +150,7 @@
&& d->size <= d->alloc && s->size <= s->alloc); \
if (d == s) return; \
if (s->size > d->alloc) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(s->size); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, s->size); \
type *ptr = M_GET_REALLOC oplist (type, d->ptr, alloc); \
if (ptr == NULL) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
@@ -219,7 +220,7 @@
assert (v != NULL && v->size <= v->alloc); \
if (v->size >= v->alloc) { \
assert(v->size == v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, v->alloc); \
assert (alloc > v->size); \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (ptr == NULL) { \
@@ -262,7 +263,7 @@
assert (v != NULL && key <= v->size && v->size <= v->alloc); \
if (v->size >= v->alloc) { \
assert(v->size == v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, v->alloc); \
assert (alloc > v->size); \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (ptr == NULL) { \
@@ -314,7 +315,7 @@
if (v->size <= size) { \
/* Increase size of array */ \
if (size > v->alloc) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE (size) ; \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, size) ; \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (ptr == NULL) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
@@ -388,7 +389,7 @@
assert(i < v->size && j <= v->size && i < j); \
size_t size = v->size + (j-i); \
if (size > v->alloc) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE (size) ; \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, size) ; \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (ptr == NULL) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
+2
View File
@@ -664,6 +664,7 @@
#define M_IN_STR_IN_STR(a) ,a,
#define M_SEPARATOR_SEPARATOR(a) ,a,
#define M_EXT_ALGO_EXT_ALGO(a) ,a,
#define M_EXPECTED_SIZE_EXPECTED_SIZE(a) ,a,
/* From an oplist - an unorded list of methods : like "INIT(mpz_init),CLEAR(mpz_clear),SET(mpz_set)" -
Return the given method in the oplist or the default method.
@@ -717,6 +718,7 @@
#define M_GET_IN_STR(...) M_GET_METHOD(IN_STR, M_NO_DEFAULT, __VA_ARGS__)
#define M_GET_SEPARATOR(...) M_GET_METHOD(SEPARATOR, ',', __VA_ARGS__)
#define M_GET_EXT_ALGO(...) M_GET_METHOD(EXT_ALGO, M_NO_EXT_ALGO, __VA_ARGS__)
#define M_GET_EXPECTED_SIZE(...) M_GET_METHOD(EXPECTED_SIZE, 8, __VA_ARGS__)
/* Define the default method.
NOTE: MEMSET_DEFAULT & MEMCPY_DEFAULT are NOT compatible with the '[1]' tricks