add isl_pw_qpolynomial_max
[platform/upstream/isl.git] / isl_ctx.c
1 /*
2  * Copyright 2008-2009 Katholieke Universiteit Leuven
3  *
4  * Use of this software is governed by the GNU LGPLv2.1 license
5  *
6  * Written by Sven Verdoolaege, K.U.Leuven, Departement
7  * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
8  */
9
10 #include "isl_ctx.h"
11 #include "isl_vec.h"
12
13 isl_ctx *isl_ctx_alloc_with_options(struct isl_options *opt)
14 {
15         struct isl_ctx *ctx = NULL;
16
17         if (!opt)
18                 return NULL;
19
20         ctx = isl_calloc_type(NULL, struct isl_ctx);
21         if (!ctx)
22                 goto error;
23
24         if (isl_hash_table_init(ctx, &ctx->name_hash, 0))
25                 goto error;
26
27         ctx->stats = isl_calloc_type(ctx, struct isl_stats);
28         if (!ctx->stats)
29                 goto error;
30
31         ctx->opt = opt;
32         ctx->ref = 0;
33
34         isl_int_init(ctx->one);
35         isl_int_set_si(ctx->one, 1);
36
37         isl_int_init(ctx->negone);
38         isl_int_set_si(ctx->negone, -1);
39
40         isl_int_init(ctx->normalize_gcd);
41
42         ctx->n_cached = 0;
43
44         return ctx;
45 error:
46         free(ctx);
47         return NULL;
48 }
49
50 struct isl_ctx *isl_ctx_alloc()
51 {
52         struct isl_options *opt;
53
54         opt = isl_options_new_with_defaults();
55
56         return isl_ctx_alloc_with_options(opt);
57 }
58
59 void isl_ctx_ref(struct isl_ctx *ctx)
60 {
61         ctx->ref++;
62 }
63
64 void isl_ctx_deref(struct isl_ctx *ctx)
65 {
66         isl_assert(ctx, ctx->ref > 0, return);
67         ctx->ref--;
68 }
69
70 void isl_ctx_free(struct isl_ctx *ctx)
71 {
72         if (!ctx)
73                 return;
74         isl_assert(ctx, ctx->ref == 0, return);
75         isl_hash_table_clear(&ctx->name_hash);
76         isl_blk_clear_cache(ctx);
77         isl_int_clear(ctx->one);
78         isl_int_clear(ctx->negone);
79         isl_int_clear(ctx->normalize_gcd);
80         free(ctx->opt);
81         free(ctx->stats);
82         free(ctx);
83 }
84
85 struct isl_options *isl_ctx_options(isl_ctx *ctx)
86 {
87         if (!ctx)
88                 return NULL;
89         return ctx->opt;
90 }