File: uint32vector.c

package info (click to toggle)
librra 0.9.0-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,032 kB
  • ctags: 1,045
  • sloc: ansic: 9,914; sh: 8,954; makefile: 125
file content (81 lines) | stat: -rw-r--r-- 1,646 bytes parent folder | download | duplicates (2)
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]);
}