1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/* $Id: uint32vector.c,v 1.1 2003/12/21 16:30:32 twogood Exp $ */
#include "uint32vector.h"
#include <synce_log.h>
#include <stdlib.h>
static void rra_uint32vector_enlarge(RRA_Uint32Vector* v, size_t size)
{
if (v->size < size)
{
size_t new_size = v->size ? v->size : 2;
while (new_size < size)
new_size <<= 1;
v->items = realloc(v->items, sizeof(uint32_t) * new_size);
if (!v->items)
{
synce_error("Failed to allocate space for %i elements - crashing!", new_size);
}
v->size = new_size;
}
}
RRA_Uint32Vector* rra_uint32vector_new()
{
return (RRA_Uint32Vector*)calloc(1, sizeof(RRA_Uint32Vector));
}
void rra_uint32vector_destroy(RRA_Uint32Vector* v, bool free_items)
{
if (v)
{
if (free_items && v->items)
free(v->items);
free(v);
}
}
RRA_Uint32Vector* rra_uint32vector_add(RRA_Uint32Vector* v, uint32_t value)
{
rra_uint32vector_enlarge(v, v->used + 1);
v->items[v->used++] = value;
return v;
}
RRA_Uint32Vector* rra_uint32vector_add_many(
RRA_Uint32Vector* v,
uint32_t* values,
size_t count)
{
unsigned i;
rra_uint32vector_enlarge(v, v->used + count);
for (i = 0; i < count; i++)
{
v->items[v->used++] = values[i];
}
return v;
}
static int rra_uint32vector_compare(const void* a, const void* b)
{
return *(const uint32_t*)a - *(const uint32_t*)b;
}
void rra_uint32vector_sort(RRA_Uint32Vector* v)
{
qsort(v->items, v->used, sizeof(uint32_t), rra_uint32vector_compare);
}
void rra_uint32vector_dump(RRA_Uint32Vector* v)
{
unsigned i;
for (i = 0; i < v->used; i++)
synce_trace("%i: %08x", i, v->items[i]);
}
|