Optionally store domains of scattering dimensions in clast for
[cloog.git] / source / stride.c
blobe8073e4d8e7c28c0a02e94a89d9d32ebbc4cfff1
1 #include <cloog/cloog.h>
3 #define ALLOC(type) (type*)malloc(sizeof(type))
5 CloogStride *cloog_stride_malloc()
7 CloogStride *s;
9 s = ALLOC(CloogStride);
10 if (!s)
11 cloog_die("memory overflow.\n");
13 s->references = 1;
14 cloog_int_init(s->stride);
15 cloog_int_init(s->offset);
16 cloog_int_init(s->factor);
17 s->constraint = cloog_constraint_invalid();
19 return s;
22 CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset)
24 CloogStride *s = cloog_stride_malloc();
26 cloog_int_set(s->stride, stride);
27 cloog_int_set(s->offset, offset);
28 cloog_int_set_si(s->factor, 0);
30 return s;
33 CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride,
34 CloogConstraint *constraint, cloog_int_t factor)
36 CloogStride *s = cloog_stride_malloc();
38 cloog_int_set(s->stride, stride);
39 cloog_int_set(s->factor, factor);
40 cloog_int_set_si(s->offset, -1);
41 s->constraint = constraint;
43 return s;
46 CloogStride *cloog_stride_copy(CloogStride *stride)
48 if (!stride)
49 return stride;
51 stride->references++;
52 return stride;
55 void cloog_stride_free(CloogStride *stride)
57 if (!stride)
58 return;
60 stride->references--;
61 if (stride->references > 0)
62 return;
64 cloog_int_clear(stride->stride);
65 cloog_int_clear(stride->offset);
66 cloog_int_clear(stride->factor);
67 cloog_constraint_release(stride->constraint);
68 free(stride);