diff options
author | LAN-TW <lantw44@gmail.com> | 2014-01-14 17:42:22 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2014-01-14 17:42:22 +0800 |
commit | 79f0f7a105abd1613e1ddb34b4c489a8d67a68e4 (patch) | |
tree | 6bbc8f21c8b52eb07435ae09d1fc328d813bdf16 | |
parent | a48f8ee270b3aa01043fd7585fd918e86869d7af (diff) | |
download | l4basic-79f0f7a105abd1613e1ddb34b4c489a8d67a68e4.tar.gz l4basic-79f0f7a105abd1613e1ddb34b4c489a8d67a68e4.tar.zst l4basic-79f0f7a105abd1613e1ddb34b4c489a8d67a68e4.zip |
LbsArray: Insert more than one item in a function call
-rw-r--r-- | l4array.c | 25 | ||||
-rw-r--r-- | l4array.h | 2 | ||||
-rw-r--r-- | test-array.c | 10 |
3 files changed, 36 insertions, 1 deletions
@@ -194,7 +194,7 @@ int lbs_array_append_ptr (LbsArray* array, const void* ptr) { int lbs_array_append_data (LbsArray* array, const void* data) { if (array->max < array->len + 1) { - if (array->max > 0){ + if (array->max > 0) { if (lbs_array_set_max (array, array->max * 2) < 0) { return -1; } @@ -210,6 +210,29 @@ int lbs_array_append_data (LbsArray* array, const void* data) { return 0; } +int lbs_array_append_mass (LbsArray* array, const void* data, size_t count) { + bool need_expand = false; + + while (array->max < array->len + count) { + need_expand = true; + if (array->max > 0) { + array->max *= 2; + } else { + array->max = 1; + } + } + + if (need_expand) { + if (lbs_array_set_max (array, array->max) < 0) { + return -1; + } + } + + memcpy (lbs_array_vp (array, array->len), data, array->size * count); + array->len += count; + return 0; +} + int lbs_array_remove (LbsArray* array) { if (array->len <= 0) { return -1; @@ -69,6 +69,8 @@ int lbs_array_set_max (LbsArray* array, size_t max); (lbs_array_append_data ((array), (&(var)))) int lbs_array_append_ptr (LbsArray* array, const void* ptr); int lbs_array_append_data (LbsArray* array, const void* data); +int lbs_array_append_mass (LbsArray* array, const void* data, + size_t count); int lbs_array_remove (LbsArray* array); int lbs_array_minimize (LbsArray* array); #define lbs_array_push_back lbs_array_append_data diff --git a/test-array.c b/test-array.c index 7bfed37..cb015fe 100644 --- a/test-array.c +++ b/test-array.c @@ -168,6 +168,16 @@ void test_array_op (void) { assert (lbs_array_v (array, int, i) == i); } + array->len = 4; + lbs_array_minimize (array); + + int arrins[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; + lbs_array_append_mass (array, arrins, 10); + assert (lbs_array_get_len (array) == 14); + for (int i = 0; i < 14; i++) { + assert (lbs_array_v (array, int, i) == i); + } + lbs_array_unref (array); printf ("%s => PASS!\n", __func__); } |