5251a9ed49e5b6615d7e047139d51e67f99da955
[libfirm] / vector.c
1 #include <string.h>
2
3 #include "adt/array.h"
4
5 #include "pbqp_t.h"
6 #include "vector.h"
7
8 vector *vector_alloc(pbqp *pbqp, unsigned length)
9 {
10         assert(length > 0);
11         vector *vec = obstack_alloc(&pbqp->obstack, sizeof(*vec) + sizeof(*vec->entries) * length);
12         assert(vec);
13
14         vec->len = length;
15         memset(vec->entries, 0, sizeof(*vec->entries) * length);
16
17         return vec;
18 }
19
20 vector *vector_copy(pbqp *pbqp, vector *v)
21 {
22         vector *copy = obstack_alloc(&pbqp->obstack, sizeof(*copy) + sizeof(*copy->entries) * length);
23
24         assert(copy);
25
26         unsigned len = v->len;
27
28         copy->len = len;
29         memcpy(copy->entries, v->entries, sizeof(*copy->entries) * len);
30
31         return copy;
32 }
33
34 void vector_add(vector *sum, vector *summand)
35 {
36         int i;
37         int len;
38
39         assert(sum);
40         assert(summand);
41         assert(sum->len == summand->len);
42
43         len = sum->len;
44
45         for (i = 0; i < len; ++i) {
46                 sum->entries[i].data += summand->entries[i].data;
47         }
48 }
49
50 void vector_set(vector *vec, unsigned index, num value)
51 {
52         assert(index < vec->len);
53         vec->entries[index].data = value;
54 }
55
56 #if EXT_GRS_DEBUG
57 void vector_set_description(vector *vec, unsigned index, char *name)
58 {
59         assert(index < vec->len);
60         vec->entries[index].name = name;
61 }
62 #endif