diff options
| author | Paul Buetow <paul@buetow.org> | 2008-11-04 21:29:33 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-11-04 21:29:33 +0000 |
| commit | 37c687c229f89202e5625bc3d3f9b1c85cb94b51 (patch) | |
| tree | d479b5a573854192f6a8703fe5f1c4bde6dae5fc /src | |
| parent | ff0828f06a1f317681c45402feda48bde592a076 (diff) | |
array_delete_iterate implemented..
Diffstat (limited to 'src')
| -rw-r--r-- | src/build.h | 2 | ||||
| -rw-r--r-- | src/core/token.c | 9 | ||||
| -rw-r--r-- | src/data/array.c | 17 | ||||
| -rw-r--r-- | src/data/array.h | 1 |
4 files changed, 23 insertions, 6 deletions
diff --git a/src/build.h b/src/build.h index 9b4930d..204d15b 100644 --- a/src/build.h +++ b/src/build.h @@ -35,7 +35,7 @@ #ifndef BUILD_H #define BUILD_H -#define BUILDNR 9335 +#define BUILDNR 9340 #define OS_FREEBSD #endif diff --git a/src/core/token.c b/src/core/token.c index ee2a0b8..16d0eab 100644 --- a/src/core/token.c +++ b/src/core/token.c @@ -319,7 +319,8 @@ void token_copy_vals(Token *p_token_to, Token *p_token_from) { p_token_to->c_filename = p_token_from->c_filename; if (NULL != p_token_from->p_array) - p_token_to->p_array = array_new_copy(p_token_from); + // Copy all tokens by reference (pointers) + p_token_to->p_array = array_new_copy(p_token_from->p_array); } void @@ -349,10 +350,8 @@ token_delete(Token *p_token) { if (p_token->c_val) free(p_token->c_val); - if (NULL != p_token->p_array) { - array_iterate(p_token->p_array, token_delete_cb); - array_delete(p_token->p_array); - } + if (NULL != p_token->p_array) + array_delete_iterate(p_token->p_array, token_delete_cb); free(p_token); } diff --git a/src/data/array.c b/src/data/array.c index 6a2b1fa..553d6f5 100644 --- a/src/data/array.c +++ b/src/data/array.c @@ -84,6 +84,23 @@ array_delete(Array *p_array) { } void +array_delete_iterate(Array *p_array, void (*func)(void *)) { + if (!p_array) + return; + + array_iterate(p_array, func); + + if (p_array->i_size) + for (int i = p_array->i_size - 1; i >= 0; --i) + arrayelement_delete(p_array->pp_ae[i]); + + if (p_array->pp_ae) + free(p_array->pp_ae); + + free(p_array); +} + +void array_set(Array *p_array, int i_index, void *p_val) { if (p_array->i_size > i_index) { p_array->pp_ae[i_index]->p_val = p_val; diff --git a/src/data/array.h b/src/data/array.h index 75f6365..14e3851 100644 --- a/src/data/array.h +++ b/src/data/array.h @@ -64,6 +64,7 @@ Array *array_new(); Array *array_new_size(int i_size); Array *array_new_copy(Array *p_array); void array_delete(Array *p_array); +void array_delete_iterate(Array *p_array, void (*func)(void*)); void array_set(Array *p_array, int i_index, void *p_val); void array_insert(Array *p_array, int i_index, void *p_val); void *array_remove(Array *p_array, int i_index); |
