diff options
| author | Paul Buetow <paul@buetow.org> | 2008-11-07 22:11:06 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-11-07 22:11:06 +0000 |
| commit | a46655f67043af257e70715903badf9d4321c4de (patch) | |
| tree | 556997ba868ac106c6f92703e6e35875e4872dc2 /src/data/array.c | |
| parent | fbff89d91c2a13155423bd83d2bbefd5d6891e23 (diff) | |
one step further for arrays.
Diffstat (limited to 'src/data/array.c')
| -rw-r--r-- | src/data/array.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/data/array.c b/src/data/array.c index 9bd0101..ba9cf2a 100644 --- a/src/data/array.c +++ b/src/data/array.c @@ -40,16 +40,15 @@ array_new() { p_array->i_size = 0; p_array->pp_ae = NULL; + array_set_used(p_array, 0); return (p_array); } Array* array_new_size(int i_size) { - Array *p_array = malloc(sizeof(Array)); + Array *p_array = array_new(); - p_array->i_size = 0; - p_array->pp_ae = NULL; array_resize(p_array, i_size); return (p_array); @@ -109,9 +108,19 @@ array_set(Array *p_array, int i_index, void *p_val) { array_resize(p_array, i_index + 1); p_array->pp_ae[i_index]->p_val = p_val; } + + if (p_array->i_used < i_index) + array_set_used(p_array, i_index); } void +array_set_used(Array *p_array, int i_used) { + //printf("foo %d",i_used); + p_array->i_used = i_used; +} + + +void array_insert(Array *p_array, int i_index, void *p_val) { if (p_array->i_size <= i_index) { array_set(p_array, i_index, p_val); @@ -127,6 +136,9 @@ array_insert(Array *p_array, int i_index, void *p_val) { p_array->pp_ae[i] = p_ae; p_ae->p_val = p_val; } + + if (p_array->i_used < i_index) + array_set_used(p_array, i_index); } void* @@ -144,7 +156,6 @@ array_remove(Array *p_array, int i_index) { p_array->pp_ae[i-1] = p_ae; array_resize(p_array, p_array->i_size - 1); - return (p_ret); } @@ -182,6 +193,9 @@ array_resize(Array *p_array, int i_size) { p_array->pp_ae[i] = arrayelement_new(NULL); p_array->i_size = i_size; + //printf("[%d > %d]", p_array->i_used, i_size); + if (p_array->i_used > i_size) + array_set_used(p_array, i_size); } void* @@ -223,8 +237,9 @@ array_splice(Array *p_array, int i_index, Array *p_array2) { void array_unshift(Array *p_array, void *p_void) { - int i_size = array_get_size(p_array); - array_set(p_array, i_size, p_void); + int i_used = array_get_used(p_array); + array_set(p_array, i_used, p_void); + array_set_used(p_array, 1+i_used); } void @@ -250,7 +265,7 @@ array_iterate(Array *p_array, void (*func)(void *)) { if (!p_array) return; - for (int i = 0; i < array_get_size(p_array); ++i) + for (int i = 0; i < array_get_used(p_array); ++i) (*func) (array_get(p_array, i)); } @@ -259,7 +274,7 @@ array_iterate2(Array *p_array, void (*func)(void *, void *), void *p_void) { if (!p_array) return; - for (int i = 0; i < array_get_size(p_array); ++i) + for (int i = 0; i < array_get_used(p_array); ++i) (*func) (array_get(p_array, i), p_void); } @@ -300,8 +315,9 @@ arrayiterator_delete(ArrayIterator *p_arrayiterator) { _Bool arrayiterator_has_next(ArrayIterator *p_arrayiterator) { + //printf("[%d]", p_arrayiterator->p_array->i_used); return (p_arrayiterator->i_cur_pos < - array_get_size(p_arrayiterator->p_array)); + array_get_used(p_arrayiterator->p_array)); } void* |
