diff options
Diffstat (limited to 'lib/vector.c')
-rw-r--r-- | lib/vector.c | 196 |
1 files changed, 91 insertions, 105 deletions
diff --git a/lib/vector.c b/lib/vector.c index 110cd2915..e38ee57fc 100644 --- a/lib/vector.c +++ b/lib/vector.c @@ -23,175 +23,161 @@ #include "vector.h" #include "memory.h" -DEFINE_MTYPE_STATIC(LIB, VECTOR, "Vector") +DEFINE_MTYPE_STATIC(LIB, VECTOR, "Vector") DEFINE_MTYPE_STATIC(LIB, VECTOR_INDEX, "Vector index") /* Initialize vector : allocate memory and return vector. */ -vector -vector_init (unsigned int size) +vector vector_init(unsigned int size) { - vector v = XCALLOC (MTYPE_VECTOR, sizeof (struct _vector)); + vector v = XCALLOC(MTYPE_VECTOR, sizeof(struct _vector)); - /* allocate at least one slot */ - if (size == 0) - size = 1; + /* allocate at least one slot */ + if (size == 0) + size = 1; - v->alloced = size; - v->active = 0; - v->index = XCALLOC (MTYPE_VECTOR_INDEX, sizeof (void *) * size); - return v; + v->alloced = size; + v->active = 0; + v->index = XCALLOC(MTYPE_VECTOR_INDEX, sizeof(void *) * size); + return v; } -void -vector_free (vector v) +void vector_free(vector v) { - XFREE (MTYPE_VECTOR_INDEX, v->index); - XFREE (MTYPE_VECTOR, v); + XFREE(MTYPE_VECTOR_INDEX, v->index); + XFREE(MTYPE_VECTOR, v); } -vector -vector_copy (vector v) +vector vector_copy(vector v) { - unsigned int size; - vector new = XCALLOC (MTYPE_VECTOR, sizeof (struct _vector)); + unsigned int size; + vector new = XCALLOC(MTYPE_VECTOR, sizeof(struct _vector)); - new->active = v->active; - new->alloced = v->alloced; + new->active = v->active; + new->alloced = v->alloced; - size = sizeof (void *) * (v->alloced); - new->index = XCALLOC (MTYPE_VECTOR_INDEX, size); - memcpy (new->index, v->index, size); + size = sizeof(void *) * (v->alloced); + new->index = XCALLOC(MTYPE_VECTOR_INDEX, size); + memcpy(new->index, v->index, size); - return new; + return new; } /* Check assigned index, and if it runs short double index pointer */ -void -vector_ensure (vector v, unsigned int num) +void vector_ensure(vector v, unsigned int num) { - if (v->alloced > num) - return; - - v->index = XREALLOC (MTYPE_VECTOR_INDEX, - v->index, sizeof (void *) * (v->alloced * 2)); - memset (&v->index[v->alloced], 0, sizeof (void *) * v->alloced); - v->alloced *= 2; - - if (v->alloced <= num) - vector_ensure (v, num); + if (v->alloced > num) + return; + + v->index = XREALLOC(MTYPE_VECTOR_INDEX, v->index, + sizeof(void *) * (v->alloced * 2)); + memset(&v->index[v->alloced], 0, sizeof(void *) * v->alloced); + v->alloced *= 2; + + if (v->alloced <= num) + vector_ensure(v, num); } /* This function only returns next empty slot index. It dose not mean the slot's index memory is assigned, please call vector_ensure() after calling this function. */ -int -vector_empty_slot (vector v) +int vector_empty_slot(vector v) { - unsigned int i; + unsigned int i; - if (v->active == 0) - return 0; + if (v->active == 0) + return 0; - for (i = 0; i < v->active; i++) - if (v->index[i] == 0) - return i; + for (i = 0; i < v->active; i++) + if (v->index[i] == 0) + return i; - return i; + return i; } /* Set value to the smallest empty slot. */ -int -vector_set (vector v, void *val) +int vector_set(vector v, void *val) { - unsigned int i; + unsigned int i; - i = vector_empty_slot (v); - vector_ensure (v, i); + i = vector_empty_slot(v); + vector_ensure(v, i); - v->index[i] = val; + v->index[i] = val; - if (v->active <= i) - v->active = i + 1; + if (v->active <= i) + v->active = i + 1; - return i; + return i; } /* Set value to specified index slot. */ -int -vector_set_index (vector v, unsigned int i, void *val) +int vector_set_index(vector v, unsigned int i, void *val) { - vector_ensure (v, i); + vector_ensure(v, i); - v->index[i] = val; + v->index[i] = val; - if (v->active <= i) - v->active = i + 1; + if (v->active <= i) + v->active = i + 1; - return i; + return i; } /* Look up vector. */ -void * -vector_lookup (vector v, unsigned int i) +void *vector_lookup(vector v, unsigned int i) { - if (i >= v->active) - return NULL; - return v->index[i]; + if (i >= v->active) + return NULL; + return v->index[i]; } /* Lookup vector, ensure it. */ -void * -vector_lookup_ensure (vector v, unsigned int i) +void *vector_lookup_ensure(vector v, unsigned int i) { - vector_ensure (v, i); - return v->index[i]; + vector_ensure(v, i); + return v->index[i]; } /* Unset value at specified index slot. */ -void -vector_unset (vector v, unsigned int i) +void vector_unset(vector v, unsigned int i) { - if (i >= v->alloced) - return; + if (i >= v->alloced) + return; - v->index[i] = NULL; + v->index[i] = NULL; - if (i + 1 == v->active) - { - v->active--; - while (i && v->index[--i] == NULL && v->active--) - ; /* Is this ugly ? */ - } + if (i + 1 == v->active) { + v->active--; + while (i && v->index[--i] == NULL && v->active--) + ; /* Is this ugly ? */ + } } -void -vector_unset_value (vector v, void *val) +void vector_unset_value(vector v, void *val) { - size_t i; - - for (i = 0; i < v->active; i++) - if (v->index[i] == val) - { - v->index[i] = NULL; - break; - } - - if (i + 1 == v->active) - do - v->active--; - while (i && v->index[--i] == NULL); + size_t i; + + for (i = 0; i < v->active; i++) + if (v->index[i] == val) { + v->index[i] = NULL; + break; + } + + if (i + 1 == v->active) + do + v->active--; + while (i && v->index[--i] == NULL); } /* Count the number of not emplty slot. */ -unsigned int -vector_count (vector v) +unsigned int vector_count(vector v) { - unsigned int i; - unsigned count = 0; + unsigned int i; + unsigned count = 0; - for (i = 0; i < v->active; i++) - if (v->index[i] != NULL) - count++; + for (i = 0; i < v->active; i++) + if (v->index[i] != NULL) + count++; - return count; + return count; } |