summaryrefslogtreecommitdiffstats
path: root/generic/tkArray.h
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tkArray.h')
-rw-r--r--generic/tkArray.h40
1 files changed, 25 insertions, 15 deletions
diff --git a/generic/tkArray.h b/generic/tkArray.h
index 266644d..44123e7 100644
--- a/generic/tkArray.h
+++ b/generic/tkArray.h
@@ -5,7 +5,7 @@
* Random access to any item is very fast. New items can be either appended
* or prepended. An array may be traversed in the forward or backward direction.
*
- * Copyright (c) 2018 by Gregor Cramer.
+ * Copyright (c) 2018-2019 by Gregor Cramer.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -28,7 +28,7 @@
* MyArray_Append(&arr, MakePair(1, 2));
* MyArray_Append(&arr, MakePair(2, 3));
* for (i = 0; i < MyArray_Size(arr); ++i) {
- * const Pair *p = MyArray_Get(arr, i);
+ * Pair *p = MyArray_Get(arr, i);
* printf("%d -> %d\n", p->key, p->value);
* ckfree(p);
* }
@@ -49,7 +49,6 @@
* for (i = 0; i < MyArray_Size(arr); ++i) {
* const Pair *p = MyArray_Get(arr, i);
* printf("%d -> %d\n", p->key, p->value);
- * ckfree(p);
* }
* MyArray_Free(&arr);
* assert(arr == NULL);
@@ -205,7 +204,7 @@ AT##_BufferSize(size_t numElems) \
\
__TK_ARRAY_UNUSED \
static int \
-AT##_IsEmpty(AT *arr) \
+AT##_IsEmpty(const AT *arr) \
{ \
assert(!arr || arr->size != 0xdeadbeef); \
return !arr || arr->size == 0u; \
@@ -247,7 +246,8 @@ __TK_ARRAY_UNUSED \
static ElemType * \
AT##_Front(AT *arr) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(!AT##_IsEmpty(arr)); \
return &arr->buf[0]; \
} \
@@ -256,7 +256,8 @@ __TK_ARRAY_UNUSED \
static ElemType * \
AT##_Back(AT *arr) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(!AT##_IsEmpty(arr)); \
return &arr->buf[arr->size - 1]; \
} \
@@ -288,7 +289,8 @@ __TK_ARRAY_UNUSED \
static void \
AT##_Clear(AT *arr, size_t from, size_t to) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(to <= AT##_Capacity(arr)); \
assert(from <= to); \
memset(arr->buf + from, 0, AT##_BufferSize(to - from)); \
@@ -311,10 +313,11 @@ __TK_ARRAY_UNUSED \
static void \
AT##_SetSize(AT *arr, size_t newSize) \
{ \
- assert(arr); \
assert(newSize <= AT##_Capacity(arr)); \
assert(!arr || arr->size != 0xdeadbeef); \
- arr->size = newSize; \
+ if (arr) { \
+ arr->size = newSize; \
+ } \
} \
\
__TK_ARRAY_UNUSED \
@@ -340,16 +343,18 @@ AT##_PopBack(AT *arr) \
\
__TK_ARRAY_UNUSED \
static ElemType * \
-AT##_Get(AT *arr, size_t at) \
+AT##_Get(const AT *arr, size_t at) \
{ \
+ assert(arr); \
assert(at < AT##_Size(arr)); \
- return &arr->buf[at]; \
+ return (ElemType *) &arr->buf[at]; \
} \
\
__TK_ARRAY_UNUSED \
static void \
AT##_Set(AT *arr, size_t at, ElemType *elem) \
{ \
+ assert(arr); \
assert(at < AT##_Size(arr)); \
arr->buf[at] = *elem; \
} \
@@ -410,7 +415,7 @@ AT##_BufferSize(size_t numElems) \
\
__TK_ARRAY_UNUSED \
static int \
-AT##_IsEmpty(AT *arr) \
+AT##_IsEmpty(const AT *arr) \
{ \
assert(!arr || arr->size != 0xdeadbeef); \
return !arr || arr->size == 0; \
@@ -436,7 +441,8 @@ __TK_ARRAY_UNUSED \
static ElemType * \
AT##_Front(AT *arr) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(!AT##_IsEmpty(arr)); \
return arr->buf[0]; \
} \
@@ -445,7 +451,8 @@ __TK_ARRAY_UNUSED \
static ElemType * \
AT##_Back(AT *arr) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(!AT##_IsEmpty(arr)); \
return arr->buf[arr->size - 1]; \
} \
@@ -493,7 +500,8 @@ __TK_ARRAY_UNUSED \
static void \
AT##_Clear(AT *arr, size_t from, size_t to) \
{ \
- assert(!arr || arr->size != 0xdeadbeef); \
+ assert(arr); \
+ assert(arr->size != 0xdeadbeef); \
assert(to <= AT##_Capacity(arr)); \
assert(from <= to); \
memset(arr->buf + from, 0, AT##_BufferSize(to - from)); \
@@ -546,6 +554,7 @@ __TK_ARRAY_UNUSED \
static ElemType * \
AT##_Get(const AT *arr, size_t at) \
{ \
+ assert(arr); \
assert(at < AT##_Size(arr)); \
return arr->buf[at]; \
} \
@@ -554,6 +563,7 @@ __TK_ARRAY_UNUSED \
static void \
AT##_Set(AT *arr, size_t at, ElemType *elem) \
{ \
+ assert(arr); \
assert(at < AT##_Size(arr)); \
arr->buf[at] = elem; \
} \