EXPECTED_SIZE can be overloaded by oplist now.
This commit is contained in:
1 parent
fdd7f9d19d
commit
32d22fef51
2 files changed
+10
-7
No files matched your search
@@ -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); \
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user