diff --git a/Makefile.am b/Makefile.am index 1dbebd91..4e1b66f4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -47,7 +47,6 @@ noinst_HEADERS = \ spooky2.c \ spooky2test.c \ tommyarray.h \ - tommyarrayof.h \ tommyarrayblk.h \ tommyarrayblkof.h \ tommychain.h \ @@ -56,7 +55,6 @@ noinst_HEADERS = \ tommylist.h \ tommytypes.h \ tommyarray.c \ - tommyarrayof.c \ tommyarrayblk.c \ tommyarrayblkof.c \ tommyhash.c \ diff --git a/elem.h b/elem.h index 281657f9..f0fd490c 100644 --- a/elem.h +++ b/elem.h @@ -23,7 +23,6 @@ #include "tommyhash.h" #include "tommyhashdyn.h" #include "tommyarray.h" -#include "tommyarrayof.h" #include "tommyarrayblk.h" #include "tommyarrayblkof.h" diff --git a/tommy.c b/tommy.c index 519d9722..adbe841d 100644 --- a/tommy.c +++ b/tommy.c @@ -28,7 +28,6 @@ #include "tommyhash.c" #include "tommyhashdyn.c" #include "tommyarray.c" -#include "tommyarrayof.c" #include "tommyarrayblk.c" #include "tommyarrayblkof.c" diff --git a/tommyarrayof.c b/tommyarrayof.c deleted file mode 100644 index b693f819..00000000 --- a/tommyarrayof.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2013 Andrea Mazzoleni. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY ANDREA MAZZOLENI AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL ANDREA MAZZOLENI OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "tommyarrayof.h" - -#include /* for memset */ - -/******************************************************************************/ -/* array */ - -void tommy_arrayof_init(tommy_arrayof* array, unsigned element_size) -{ - /* fixed initial size */ - array->element_size = element_size; - array->bucket_bit = TOMMY_ARRAYOF_BIT; - array->bucket_max = 1 << array->bucket_bit; - array->bucket[0] = tommy_malloc(array->bucket_max * array->element_size); - - /* initializes it with zeros */ - memset(array->bucket[0], 0, array->bucket_max * array->element_size); - - array->bucket_mac = 1; - array->size = 0; -} - -void tommy_arrayof_done(tommy_arrayof* array) -{ - unsigned i; - for(i=0;ibucket_mac;++i) - tommy_free(array->bucket[i]); -} - -void tommy_arrayof_grow(tommy_arrayof* array, unsigned size) -{ - while (size > array->bucket_max) { - /* allocate one more bucket */ - array->bucket[array->bucket_mac] = tommy_malloc(array->bucket_max * array->element_size); - - /* initializes it with zeros */ - memset(array->bucket[array->bucket_mac], 0, array->bucket_max * array->element_size); - - ++array->bucket_mac; - ++array->bucket_bit; - array->bucket_max = 1 << array->bucket_bit; - } - - if (array->size < size) - array->size = size; -} - -tommy_size_t tommy_arrayof_memory_usage(tommy_arrayof* array) -{ - return array->bucket_max * (tommy_size_t)array->element_size; -} - diff --git a/tommyarrayof.h b/tommyarrayof.h deleted file mode 100644 index e0f6c49d..00000000 --- a/tommyarrayof.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2013 Andrea Mazzoleni. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY ANDREA MAZZOLENI AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL ANDREA MAZZOLENI OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** \file - * Dynamic array based on segments of exponential growing size. - * - * This array is able to grow dynamically upon request. - * - * This is very similar at ::tommy_array, but it allows to store elements of any - * size and not just pointers. - */ - -#ifndef __TOMMYARRAYOF_H -#define __TOMMYARRAYOF_H - -#include "tommytypes.h" - -#include /* for assert */ - -/******************************************************************************/ -/* array */ - -/** - * Initial and minimal size of the array expressed as a power of 2. - * The initial size is 2^TOMMY_ARRAYOF_BIT. - */ -#define TOMMY_ARRAYOF_BIT 6 - -/** \internal - * Max number of elements as a power of 2. - */ -#define TOMMY_ARRAYOF_BIT_MAX 32 - -/** - * Array. - */ -typedef struct tommy_arrayof_struct { - void* bucket[TOMMY_ARRAYOF_BIT_MAX]; /**< Dynamic array of buckets. */ - unsigned element_size; /**< Size of the stored element in bytes. */ - unsigned bucket_bit; /**< Bits used in the bit mask. */ - unsigned bucket_max; /**< Number of buckets. */ - unsigned bucket_mac; /**< Number of vectors allocated. */ - unsigned size; /**< Currently allocated and initialized size. */ -} tommy_arrayof; - -/** - * Initializes the array. - */ -void tommy_arrayof_init(tommy_arrayof* array, unsigned element_size); - -/** - * Deinitializes the array. - */ -void tommy_arrayof_done(tommy_arrayof* array); - -/** - * Grow the size up to the specified value. - * All the new elements in the array are initialized with the 0 value. - */ -void tommy_arrayof_grow(tommy_arrayof* array, unsigned size); - -/** - * Gets a reference of the element at the specified position. - * You must be sure that space for this position is already - * allocated calling tommy_arrayof_grow(). - */ -tommy_inline void* tommy_arrayof_ref(tommy_arrayof* array, unsigned pos) -{ - unsigned char* base; - - assert(pos < array->size); - - /* special case for the first bucket */ - if (pos < (1 << TOMMY_ARRAYOF_BIT)) { - base = array->bucket[0]; - } else { - /* get the highest bit set */ - unsigned bsr = tommy_ilog2_u32(pos); - - /* clear the highest bit */ - pos -= 1 << bsr; - - base = array->bucket[bsr - TOMMY_ARRAYOF_BIT + 1]; - } - - return base + pos * array->element_size; -} - -/** - * Gets the initialized size of the array. - */ -tommy_inline unsigned tommy_arrayof_size(tommy_arrayof* array) -{ - return array->size; -} - -/** - * Gets the size of allocated memory. - */ -tommy_size_t tommy_arrayof_memory_usage(tommy_arrayof* array); - -#endif -