Fix last commit.
[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         unsigned len = v->len;
23         vector *copy = obstack_alloc(&pbqp->obstack, sizeof(*copy) + sizeof(*copy->entries) * len);
24
25         assert(copy);
26
27         copy->len = len;
28         memcpy(copy->entries, v->entries, sizeof(*copy->entries) * len);
29
30         return copy;
31 }
32
33 void vector_add(vector *sum, vector *summand)
34 {
35         int i;
36         int len;
37
38         assert(sum);
39         assert(summand);
40         assert(sum->len == summand->len);
41
42         len = sum->len;
43
44         for (i = 0; i < len; ++i) {
45                 sum->entries[i].data += summand->entries[i].data;
46         }
47 }
48
49 void vector_set(vector *vec, unsigned index, num value)
50 {
51         assert(index < vec->len);
52         vec->entries[index].data = value;
53 }
54
55 #if EXT_GRS_DEBUG
56 void vector_set_description(vector *vec, unsigned index, char *name)
57 {
58         assert(index < vec->len);
59         vec->entries[index].name = name;
60 }
61 #endif