1#include <stdlib.h>
2#include <cloog/cloog.h>
3
4#define ALLOC(type) (type*)malloc(sizeof(type))
5
6CloogStride *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
23CloogStride *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
34CloogStride *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
47CloogStride *cloog_stride_copy(CloogStride *stride)
48{
49	if (!stride)
50		return stride;
51
52	stride->references++;
53	return stride;
54}
55
56void 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