8ea8d1ea282febd078579f8fa0345c7eb45d9292
[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_copy(&pbqp->obstack, v, sizeof(*copy) + sizeof(*copy->entries) * len);
24         assert(copy);
25
26         return copy;
27 }
28
29 void vector_add(vector *sum, vector *summand)
30 {
31         int i;
32         int len;
33
34         assert(sum);
35         assert(summand);
36         assert(sum->len == summand->len);
37
38         len = sum->len;
39
40         for (i = 0; i < len; ++i) {
41                 sum->entries[i].data += summand->entries[i].data;
42         }
43 }
44
45 void vector_set(vector *vec, unsigned index, num value)
46 {
47         assert(index < vec->len);
48         vec->entries[index].data = value;
49 }
50
51 #if EXT_GRS_DEBUG
52 void vector_set_description(vector *vec, unsigned index, char *name)
53 {
54         assert(index < vec->len);
55         vec->entries[index].name = name;
56 }
57 #endif
58
59 void vector_add_value(vector *vec, num value)
60 {
61         unsigned index;
62         unsigned len;
63
64         assert(vec);
65
66         len = vec->len;
67
68         for (index = 0; index < len; ++index) {
69                 if (vec->entries[index].data == INF_COSTS) continue;
70
71                 vec->entries[index].data += value;
72         }
73 }