1 /* 2 * Copyright 2008-2009 Katholieke Universiteit Leuven 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, K.U.Leuven, Departement 7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium 8 */ 9 10 #ifndef ISL_CONSTRAINT_H 11 #define ISL_CONSTRAINT_H 12 13 #include <isl/local_space.h> 14 #include <isl/space.h> 15 #include <isl/aff_type.h> 16 #include <isl/set_type.h> 17 #include <isl/printer.h> 18 19 #if defined(__cplusplus) 20 extern "C" { 21 #endif 22 23 struct isl_constraint; 24 typedef struct isl_constraint isl_constraint; 25 26 isl_ctx *isl_constraint_get_ctx(__isl_keep isl_constraint *c); 27 28 __isl_give isl_constraint *isl_equality_alloc(__isl_take isl_local_space *ls); 29 __isl_give isl_constraint *isl_inequality_alloc(__isl_take isl_local_space *ls); 30 31 struct isl_constraint *isl_constraint_cow(struct isl_constraint *c); 32 struct isl_constraint *isl_constraint_copy(struct isl_constraint *c); 33 void *isl_constraint_free(__isl_take isl_constraint *c); 34 35 int isl_basic_set_n_constraint(__isl_keep isl_basic_set *bset); 36 int isl_basic_map_foreach_constraint(__isl_keep isl_basic_map *bmap, 37 int (*fn)(__isl_take isl_constraint *c, void *user), void *user); 38 int isl_basic_set_foreach_constraint(__isl_keep isl_basic_set *bset, 39 int (*fn)(__isl_take isl_constraint *c, void *user), void *user); 40 int isl_constraint_is_equal(struct isl_constraint *constraint1, 41 struct isl_constraint *constraint2); 42 43 int isl_basic_set_foreach_bound_pair(__isl_keep isl_basic_set *bset, 44 enum isl_dim_type type, unsigned pos, 45 int (*fn)(__isl_take isl_constraint *lower, 46 __isl_take isl_constraint *upper, 47 __isl_take isl_basic_set *bset, void *user), void *user); 48 49 __isl_give isl_basic_map *isl_basic_map_add_constraint( 50 __isl_take isl_basic_map *bmap, __isl_take isl_constraint *constraint); 51 __isl_give isl_basic_set *isl_basic_set_add_constraint( 52 __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); 53 __isl_give isl_map *isl_map_add_constraint(__isl_take isl_map *map, 54 __isl_take isl_constraint *constraint); 55 __isl_give isl_set *isl_set_add_constraint(__isl_take isl_set *set, 56 __isl_take isl_constraint *constraint); 57 58 int isl_basic_map_has_defining_equality( 59 __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, 60 __isl_give isl_constraint **c); 61 int isl_basic_set_has_defining_equality( 62 struct isl_basic_set *bset, enum isl_dim_type type, int pos, 63 struct isl_constraint **constraint); 64 int isl_basic_set_has_defining_inequalities( 65 struct isl_basic_set *bset, enum isl_dim_type type, int pos, 66 struct isl_constraint **lower, 67 struct isl_constraint **upper); 68 69 __isl_give isl_space *isl_constraint_get_space( 70 __isl_keep isl_constraint *constraint); 71 __isl_give isl_local_space *isl_constraint_get_local_space( 72 __isl_keep isl_constraint *constraint); 73 int isl_constraint_dim(struct isl_constraint *constraint, 74 enum isl_dim_type type); 75 76 int isl_constraint_involves_dims(__isl_keep isl_constraint *constraint, 77 enum isl_dim_type type, unsigned first, unsigned n); 78 79 const char *isl_constraint_get_dim_name(__isl_keep isl_constraint *constraint, 80 enum isl_dim_type type, unsigned pos); 81 void isl_constraint_get_constant(__isl_keep isl_constraint *constraint, 82 isl_int *v); 83 void isl_constraint_get_coefficient(__isl_keep isl_constraint *constraint, 84 enum isl_dim_type type, int pos, isl_int *v); 85 __isl_give isl_constraint *isl_constraint_set_constant( 86 __isl_take isl_constraint *constraint, isl_int v); 87 __isl_give isl_constraint *isl_constraint_set_constant_si( 88 __isl_take isl_constraint *constraint, int v); 89 __isl_give isl_constraint *isl_constraint_set_coefficient( 90 __isl_take isl_constraint *constraint, 91 enum isl_dim_type type, int pos, isl_int v); 92 __isl_give isl_constraint *isl_constraint_set_coefficient_si( 93 __isl_take isl_constraint *constraint, 94 enum isl_dim_type type, int pos, int v); 95 96 __isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint, 97 int pos); 98 99 struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint); 100 101 int isl_constraint_is_equality(__isl_keep isl_constraint *constraint); 102 int isl_constraint_is_div_constraint(__isl_keep isl_constraint *constraint); 103 104 int isl_constraint_is_lower_bound(__isl_keep isl_constraint *constraint, 105 enum isl_dim_type type, unsigned pos); 106 int isl_constraint_is_upper_bound(__isl_keep isl_constraint *constraint, 107 enum isl_dim_type type, unsigned pos); 108 109 __isl_give isl_basic_map *isl_basic_map_from_constraint( 110 __isl_take isl_constraint *constraint); 111 struct isl_basic_set *isl_basic_set_from_constraint( 112 struct isl_constraint *constraint); 113 114 __isl_give isl_aff *isl_constraint_get_bound( 115 __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos); 116 __isl_give isl_aff *isl_constraint_get_aff( 117 __isl_keep isl_constraint *constraint); 118 __isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff); 119 __isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff); 120 121 __isl_give isl_basic_set *isl_basic_set_drop_constraint( 122 __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); 123 124 __isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p, 125 __isl_keep isl_constraint *c); 126 void isl_constraint_dump(__isl_keep isl_constraint *c); 127 128 #if defined(__cplusplus) 129 } 130 #endif 131 132 #include <isl/dim.h> 133 134 #endif 135