2 * Copyright 2008-2009 Katholieke Universiteit Leuven
4 * Use of this software is governed by the GNU LGPLv2.1 license
6 * Written by Sven Verdoolaege, K.U.Leuven, Departement
7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
10 #include <isl_ctx_private.h>
12 #include <isl/options.h>
14 static struct isl_options
*find_nested_options(struct isl_args
*args
,
15 void *opt
, struct isl_args
*wanted
)
18 struct isl_options
*options
;
23 for (i
= 0; args
->args
[i
].type
!= isl_arg_end
; ++i
) {
24 if (args
->args
[i
].type
!= isl_arg_child
)
26 options
= find_nested_options(args
->args
[i
].u
.child
.child
,
27 *(void **)(((char *)opt
) + args
->args
[i
].offset
),
36 static struct isl_options
*find_nested_isl_options(struct isl_args
*args
,
39 return find_nested_options(args
, opt
, &isl_options_args
);
42 void *isl_ctx_peek_options(isl_ctx
*ctx
, struct isl_args
*args
)
46 return find_nested_options(ctx
->user_args
, ctx
->user_opt
, args
);
49 isl_ctx
*isl_ctx_alloc_with_options(struct isl_args
*args
, void *user_opt
)
51 struct isl_ctx
*ctx
= NULL
;
52 struct isl_options
*opt
= NULL
;
53 int opt_allocated
= 0;
58 opt
= find_nested_isl_options(args
, user_opt
);
60 opt
= isl_options_new_with_defaults();
66 ctx
= isl_calloc_type(NULL
, struct isl_ctx
);
70 if (isl_hash_table_init(ctx
, &ctx
->id_table
, 0))
73 ctx
->stats
= isl_calloc_type(ctx
, struct isl_stats
);
77 ctx
->user_args
= args
;
78 ctx
->user_opt
= user_opt
;
79 ctx
->opt_allocated
= opt_allocated
;
83 isl_int_init(ctx
->zero
);
84 isl_int_set_si(ctx
->zero
, 0);
86 isl_int_init(ctx
->one
);
87 isl_int_set_si(ctx
->one
, 1);
89 isl_int_init(ctx
->two
);
90 isl_int_set_si(ctx
->two
, 2);
92 isl_int_init(ctx
->negone
);
93 isl_int_set_si(ctx
->negone
, -1);
95 isl_int_init(ctx
->normalize_gcd
);
100 ctx
->error
= isl_error_none
;
104 isl_args_free(args
, user_opt
);
106 isl_options_free(opt
);
111 struct isl_ctx
*isl_ctx_alloc()
113 struct isl_options
*opt
;
115 opt
= isl_options_new_with_defaults();
117 return isl_ctx_alloc_with_options(&isl_options_args
, opt
);
120 void isl_ctx_ref(struct isl_ctx
*ctx
)
125 void isl_ctx_deref(struct isl_ctx
*ctx
)
127 isl_assert(ctx
, ctx
->ref
> 0, return);
131 void isl_ctx_free(struct isl_ctx
*ctx
)
135 isl_assert(ctx
, ctx
->ref
== 0, return);
136 isl_hash_table_clear(&ctx
->id_table
);
137 isl_blk_clear_cache(ctx
);
138 isl_int_clear(ctx
->zero
);
139 isl_int_clear(ctx
->one
);
140 isl_int_clear(ctx
->two
);
141 isl_int_clear(ctx
->negone
);
142 isl_int_clear(ctx
->normalize_gcd
);
143 isl_args_free(ctx
->user_args
, ctx
->user_opt
);
144 if (ctx
->opt_allocated
)
150 struct isl_options
*isl_ctx_options(isl_ctx
*ctx
)
157 enum isl_error
isl_ctx_last_error(isl_ctx
*ctx
)
162 void isl_ctx_reset_error(isl_ctx
*ctx
)
164 ctx
->error
= isl_error_none
;
167 void isl_ctx_set_error(isl_ctx
*ctx
, enum isl_error error
)
173 void isl_ctx_abort(isl_ctx
*ctx
)
179 void isl_ctx_resume(isl_ctx
*ctx
)
185 int isl_ctx_aborted(isl_ctx
*ctx
)
187 return ctx
? ctx
->abort
: -1;
190 int isl_ctx_parse_options(isl_ctx
*ctx
, int argc
, char **argv
, unsigned flags
)
194 return isl_args_parse(ctx
->user_args
, argc
, argv
, ctx
->user_opt
, flags
);