Initial version of the integer set library
[platform/upstream/isl.git] / isl_blk.c
1 #include "isl_blk.h"
2
3 struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n)
4 {
5         struct isl_blk block;
6
7         block.data = isl_alloc_array(ctx, isl_int, n);
8         if (!block.data)
9                 block.size = -1;
10         else {
11                 int i;
12                 block.size = n;
13                 for (i = 0; i < n; ++i)
14                         isl_int_init(block.data[i]);
15         }
16
17         return block;
18 }
19
20 struct isl_blk isl_blk_extend(struct isl_ctx *ctx, struct isl_blk block,
21                                 size_t new_n)
22 {
23         if (block.size >= new_n)
24                 return block;
25         block.data = isl_realloc_array(ctx, block.data, isl_int, new_n);
26         if (!block.data)
27                 block.size = -1;
28         else {
29                 int i;
30                 for (i = block.size; i < new_n; ++i)
31                         isl_int_init(block.data[i]);
32                 block.size = new_n;
33         }
34
35         return block;
36 }
37
38 void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block)
39 {
40         int i;
41
42         for (i = 0; i < block.size; ++i)
43                 isl_int_clear(block.data[i]);
44         free(block.data);
45 }