diff options
Diffstat (limited to 'mysys/array.c')
-rw-r--r-- | mysys/array.c | 145 |
1 files changed, 124 insertions, 21 deletions
diff --git a/mysys/array.c b/mysys/array.c index cc6710124d7..6d00585f24d 100644 --- a/mysys/array.c +++ b/mysys/array.c @@ -1,19 +1,18 @@ -/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Handling of arrays that can grow dynamicly. */ @@ -25,12 +24,28 @@ #include "m_string.h" /* - Initiate array and alloc space for init_alloc elements. Array is usable - even if space allocation failed + Initiate dynamic array + + SYNOPSIS + init_dynamic_array() + array Pointer to an array + element_size Size of element + init_alloc Number of initial elements + alloc_increment Increment for adding new elements + + DESCRIPTION + init_dynamic_array() initiates array and allocate space for + init_alloc eilements. + Array is usable even if space allocation failed. + + RETURN VALUE + TRUE my_malloc_ci() failed + FALSE Ok */ my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size, - uint init_alloc, uint alloc_increment CALLER_INFO_PROTO) + uint init_alloc, + uint alloc_increment CALLER_INFO_PROTO) { DBUG_ENTER("init_dynamic_array"); if (!alloc_increment) @@ -52,8 +67,20 @@ my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size, DBUG_RETURN(TRUE); } DBUG_RETURN(FALSE); -} +} +/* + Insert element at the end of array. Allocate memory if needed. + + SYNOPSIS + insert_dynamic() + array + element + + RETURN VALUE + TRUE Insert failed + FALSE Ok +*/ my_bool insert_dynamic(DYNAMIC_ARRAY *array, gptr element) { @@ -73,7 +100,22 @@ my_bool insert_dynamic(DYNAMIC_ARRAY *array, gptr element) } - /* Alloc room for one element */ +/* + Alloc space for next element(s) + + SYNOPSIS + alloc_dynamic() + array + + DESCRIPTION + alloc_dynamic() checks if there is empty space for at least + one element if not tries to allocate space for alloc_increment + elements at the end of array. + + RETURN VALUE + pointer Pointer to empty space for element + 0 Error +*/ byte *alloc_dynamic(DYNAMIC_ARRAY *array) { @@ -92,7 +134,17 @@ byte *alloc_dynamic(DYNAMIC_ARRAY *array) } - /* remove last element from array and return it */ +/* + Pop last element from array. + + SYNOPSIS + pop_dynamic() + array + + RETURN VALUE + pointer Ok + 0 Array is empty +*/ byte *pop_dynamic(DYNAMIC_ARRAY *array) { @@ -101,6 +153,23 @@ byte *pop_dynamic(DYNAMIC_ARRAY *array) return 0; } +/* + Replace elemnent in array with given element and index + + SYNOPSIS + set_dynamic() + array + element Element to be inserted + idx Index where element is to be inserted + + DESCRIPTION + set_dynamic() replaces element in array. + If idx > max_element insert new element. Allocate memory if needed. + + RETURN VALUE + TRUE Idx was out of range and allocation of new memory failed + FALSE Ok +*/ my_bool set_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx) { @@ -128,6 +197,15 @@ my_bool set_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx) return FALSE; } +/* + Get an element from array by given index + + SYNOPSIS + get_dynamic() + array + gptr Element to be returned. If idx > elements contain zeroes. + idx Index of element wanted. +*/ void get_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx) { @@ -143,6 +221,14 @@ void get_dynamic(DYNAMIC_ARRAY *array, gptr element, uint idx) } +/* + Empty array by freeing all memory + + SYNOPSIS + delete_dynamic() + array Array to be deleted +*/ + void delete_dynamic(DYNAMIC_ARRAY *array) { if (array->buffer) @@ -153,6 +239,14 @@ void delete_dynamic(DYNAMIC_ARRAY *array) } } +/* + Delete element by given index + + SYNOPSIS + delete_dynamic_element() + array + idx Index of element to be deleted +*/ void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx) { @@ -163,6 +257,15 @@ void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx) } +/* + Free unused memory + + SYNOPSIS + freeze_size() + array Array to be freed + +*/ + void freeze_size(DYNAMIC_ARRAY *array) { uint elements=max(array->elements,1); |