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