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