1 #include <stdlib.h>
2 #include <cloog/cloog.h>
3
4 #define ALLOC(type) (type*)malloc(sizeof(type))
5
cloog_stride_malloc()6 CloogStride *cloog_stride_malloc()
7 {
8 CloogStride *s;
9
10 s = ALLOC(CloogStride);
11 if (!s)
12 cloog_die("memory overflow.\n");
13
14 s->references = 1;
15 cloog_int_init(s->stride);
16 cloog_int_init(s->offset);
17 cloog_int_init(s->factor);
18 s->constraint = cloog_constraint_invalid();
19
20 return s;
21 }
22
cloog_stride_alloc(cloog_int_t stride,cloog_int_t offset)23 CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset)
24 {
25 CloogStride *s = cloog_stride_malloc();
26
27 cloog_int_set(s->stride, stride);
28 cloog_int_set(s->offset, offset);
29 cloog_int_set_si(s->factor, 0);
30
31 return s;
32 }
33
cloog_stride_alloc_from_constraint(cloog_int_t stride,CloogConstraint * constraint,cloog_int_t factor)34 CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride,
35 CloogConstraint *constraint, cloog_int_t factor)
36 {
37 CloogStride *s = cloog_stride_malloc();
38
39 cloog_int_set(s->stride, stride);
40 cloog_int_set(s->factor, factor);
41 cloog_int_set_si(s->offset, -1);
42 s->constraint = constraint;
43
44 return s;
45 }
46
cloog_stride_copy(CloogStride * stride)47 CloogStride *cloog_stride_copy(CloogStride *stride)
48 {
49 if (!stride)
50 return stride;
51
52 stride->references++;
53 return stride;
54 }
55
cloog_stride_free(CloogStride * stride)56 void cloog_stride_free(CloogStride *stride)
57 {
58 if (!stride)
59 return;
60
61 stride->references--;
62 if (stride->references > 0)
63 return;
64
65 cloog_int_clear(stride->stride);
66 cloog_int_clear(stride->offset);
67 cloog_int_clear(stride->factor);
68 cloog_constraint_release(stride->constraint);
69 free(stride);
70 }
71