1 #ifndef ISL_MULTI_H 2 #define ISL_MULTI_H 3 4 #include <isl/val_type.h> 5 #include <isl/space_type.h> 6 #include <isl/list.h> 7 #include <isl/set_type.h> 8 9 #if defined(__cplusplus) 10 extern "C" { 11 #endif 12 13 #define ISL_DECLARE_MULTI(BASE) \ 14 isl_ctx *isl_multi_##BASE##_get_ctx( \ 15 __isl_keep isl_multi_##BASE *multi); \ 16 __isl_export \ 17 __isl_give isl_space *isl_multi_##BASE##_get_space( \ 18 __isl_keep isl_multi_##BASE *multi); \ 19 __isl_give isl_space *isl_multi_##BASE##_get_domain_space( \ 20 __isl_keep isl_multi_##BASE *multi); \ 21 __isl_export \ 22 __isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list( \ 23 __isl_keep isl_multi_##BASE *multi); \ 24 __isl_constructor \ 25 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list( \ 26 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \ 27 __isl_export \ 28 __isl_give isl_multi_##BASE *isl_space_multi_##BASE( \ 29 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \ 30 __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy( \ 31 __isl_keep isl_multi_##BASE *multi); \ 32 __isl_null isl_multi_##BASE *isl_multi_##BASE##_free( \ 33 __isl_take isl_multi_##BASE *multi); \ 34 __isl_export \ 35 isl_bool isl_multi_##BASE##_plain_is_equal( \ 36 __isl_keep isl_multi_##BASE *multi1, \ 37 __isl_keep isl_multi_##BASE *multi2); \ 38 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user( \ 39 __isl_take isl_multi_##BASE *multi); \ 40 __isl_export \ 41 isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi); \ 42 __isl_export \ 43 __isl_give isl_##BASE *isl_multi_##BASE##_get_at( \ 44 __isl_keep isl_multi_##BASE *multi, int pos); \ 45 __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE( \ 46 __isl_keep isl_multi_##BASE *multi, int pos); \ 47 __isl_export \ 48 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at( \ 49 __isl_take isl_multi_##BASE *multi, int pos, \ 50 __isl_take isl_##BASE *el); \ 51 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \ 52 __isl_take isl_multi_##BASE *multi, int pos, \ 53 __isl_take isl_##BASE *el); \ 54 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice( \ 55 __isl_take isl_multi_##BASE *multi1, unsigned pos, \ 56 __isl_take isl_multi_##BASE *multi2); \ 57 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \ 58 __isl_take isl_multi_##BASE *multi); \ 59 __isl_export \ 60 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \ 61 __isl_take isl_multi_##BASE *multi1, \ 62 __isl_take isl_multi_##BASE *multi2); \ 63 __isl_export \ 64 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \ 65 __isl_take isl_multi_##BASE *multi1, \ 66 __isl_take isl_multi_##BASE *multi2); \ 67 __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \ 68 __isl_take isl_multi_##BASE *multi); \ 69 isl_bool isl_multi_##BASE##_range_is_wrapping( \ 70 __isl_keep isl_multi_##BASE *multi); \ 71 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \ 72 __isl_take isl_multi_##BASE *multi); \ 73 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range( \ 74 __isl_take isl_multi_##BASE *multi); \ 75 __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \ 76 __isl_take isl_multi_##BASE *multi, \ 77 __isl_take isl_space *model); \ 78 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range( \ 79 __isl_take isl_multi_##BASE *multi); 80 81 #define ISL_DECLARE_MULTI_IDENTITY(BASE) \ 82 __isl_overload \ 83 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE( \ 84 __isl_take isl_multi_##BASE *multi); \ 85 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity( \ 86 __isl_take isl_space *space); \ 87 __isl_overload \ 88 __isl_give isl_multi_##BASE * \ 89 isl_multi_##BASE##_identity_on_domain_space( \ 90 __isl_take isl_space *space); \ 91 __isl_export \ 92 __isl_give isl_multi_##BASE * \ 93 isl_space_identity_multi_##BASE##_on_domain( \ 94 __isl_take isl_space *space); 95 96 #define ISL_DECLARE_MULTI_CMP(BASE) \ 97 int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1, \ 98 __isl_keep isl_multi_##BASE *multi2); 99 100 #define ISL_DECLARE_MULTI_ARITH(BASE) \ 101 __isl_overload \ 102 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \ 103 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \ 104 __isl_overload \ 105 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val( \ 106 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \ 107 __isl_overload \ 108 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \ 109 __isl_take isl_multi_##BASE *multi, \ 110 __isl_take isl_multi_val *mv); \ 111 __isl_overload \ 112 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val( \ 113 __isl_take isl_multi_##BASE *multi, \ 114 __isl_take isl_multi_val *mv); \ 115 __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \ 116 __isl_take isl_multi_##BASE *multi, \ 117 __isl_take isl_multi_val *mv); \ 118 __isl_export \ 119 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \ 120 __isl_take isl_multi_##BASE *multi1, \ 121 __isl_take isl_multi_##BASE *multi2); \ 122 __isl_export \ 123 __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \ 124 __isl_take isl_multi_##BASE *multi1, \ 125 __isl_take isl_multi_##BASE *multi2); \ 126 __isl_export \ 127 __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg( \ 128 __isl_take isl_multi_##BASE *multi); 129 130 #define ISL_DECLARE_MULTI_MIN_MAX(BASE) \ 131 __isl_export \ 132 __isl_give isl_multi_##BASE *isl_multi_##BASE##_min( \ 133 __isl_take isl_multi_##BASE *multi1, \ 134 __isl_take isl_multi_##BASE *multi2); \ 135 __isl_export \ 136 __isl_give isl_multi_##BASE *isl_multi_##BASE##_max( \ 137 __isl_take isl_multi_##BASE *multi1, \ 138 __isl_take isl_multi_##BASE *multi2); 139 140 #define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE) \ 141 __isl_overload \ 142 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val( \ 143 __isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v); \ 144 __isl_overload \ 145 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val( \ 146 __isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv); 147 148 #define ISL_DECLARE_MULTI_ZERO(BASE) \ 149 __isl_export \ 150 __isl_give isl_multi_##BASE *isl_multi_##BASE##_zero( \ 151 __isl_take isl_space *space); \ 152 __isl_export \ 153 __isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE( \ 154 __isl_take isl_space *space); 155 156 #define ISL_DECLARE_MULTI_NAN(BASE) \ 157 __isl_export \ 158 isl_bool isl_multi_##BASE##_involves_nan( \ 159 __isl_keep isl_multi_##BASE *multi); 160 161 #define ISL_DECLARE_MULTI_DROP_DIMS(BASE) \ 162 isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi, \ 163 enum isl_dim_type type); \ 164 __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims( \ 165 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 166 unsigned first, unsigned n); 167 #define ISL_DECLARE_MULTI_DIMS(BASE) \ 168 ISL_DECLARE_MULTI_DROP_DIMS(BASE) \ 169 isl_bool isl_multi_##BASE##_involves_dims( \ 170 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \ 171 unsigned first, unsigned n); \ 172 __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims( \ 173 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 174 unsigned first, unsigned n); \ 175 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims( \ 176 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 177 unsigned n); \ 178 __isl_give isl_multi_##BASE * \ 179 isl_multi_##BASE##_project_domain_on_params( \ 180 __isl_take isl_multi_##BASE *multi); 181 182 #define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE) \ 183 __isl_export \ 184 __isl_give isl_multi_##BASE * \ 185 isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi, \ 186 __isl_take isl_space *domain); 187 188 #define ISL_DECLARE_MULTI_LOCALS(BASE) \ 189 __isl_export \ 190 isl_bool isl_multi_##BASE##_involves_locals( \ 191 __isl_keep isl_multi_##BASE *multi); 192 193 #define ISL_DECLARE_MULTI_DIM_ID(BASE) \ 194 int isl_multi_##BASE##_find_dim_by_name( \ 195 __isl_keep isl_multi_##BASE *multi, \ 196 enum isl_dim_type type, const char *name); \ 197 int isl_multi_##BASE##_find_dim_by_id( \ 198 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \ 199 __isl_keep isl_id *id); \ 200 __isl_give isl_id *isl_multi_##BASE##_get_dim_id( \ 201 __isl_keep isl_multi_##BASE *multi, \ 202 enum isl_dim_type type, unsigned pos); \ 203 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name( \ 204 __isl_take isl_multi_##BASE *multi, \ 205 enum isl_dim_type type, unsigned pos, const char *s); \ 206 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id( \ 207 __isl_take isl_multi_##BASE *multi, \ 208 enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); 209 210 #define ISL_DECLARE_MULTI_TUPLE_ID(BASE) \ 211 const char *isl_multi_##BASE##_get_tuple_name( \ 212 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 213 __isl_export \ 214 isl_bool isl_multi_##BASE##_has_range_tuple_id( \ 215 __isl_keep isl_multi_##BASE *multi); \ 216 isl_bool isl_multi_##BASE##_has_tuple_id( \ 217 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 218 __isl_export \ 219 __isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id( \ 220 __isl_keep isl_multi_##BASE *multi); \ 221 __isl_give isl_id *isl_multi_##BASE##_get_tuple_id( \ 222 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 223 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name( \ 224 __isl_take isl_multi_##BASE *multi, \ 225 enum isl_dim_type type, const char *s); \ 226 __isl_overload \ 227 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id( \ 228 __isl_take isl_multi_##BASE *multi, __isl_take isl_id *id); \ 229 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id( \ 230 __isl_take isl_multi_##BASE *multi, \ 231 enum isl_dim_type type, __isl_take isl_id *id); \ 232 __isl_export \ 233 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id( \ 234 __isl_take isl_multi_##BASE *multi); \ 235 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id( \ 236 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type); 237 238 #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \ 239 __isl_export \ 240 __isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \ 241 __isl_take isl_multi_##BASE *multi1, \ 242 __isl_take isl_multi_##BASE *multi2); \ 243 __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice( \ 244 __isl_take isl_multi_##BASE *multi1, unsigned in_pos, \ 245 unsigned out_pos, __isl_take isl_multi_##BASE *multi2); 246 247 #define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE) \ 248 __isl_export \ 249 __isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain( \ 250 __isl_take isl_multi_##BASE *multi, \ 251 __isl_take isl_multi_id *tuple); \ 252 __isl_export \ 253 __isl_give isl_multi_##BASE * \ 254 isl_multi_##BASE##_bind_domain_wrapped_domain( \ 255 __isl_take isl_multi_##BASE *multi, \ 256 __isl_take isl_multi_id *tuple); 257 258 #define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE) \ 259 __isl_export \ 260 __isl_give isl_multi_##BASE * \ 261 isl_multi_##BASE##_unbind_params_insert_domain( \ 262 __isl_take isl_multi_##BASE *multi, \ 263 __isl_take isl_multi_id *domain); 264 265 #define ISL_DECLARE_MULTI_PARAM(BASE) \ 266 __isl_overload \ 267 isl_bool isl_multi_##BASE##_involves_param_id( \ 268 __isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id); \ 269 __isl_overload \ 270 isl_bool isl_multi_##BASE##_involves_param_id_list( \ 271 __isl_keep isl_multi_##BASE *multi, \ 272 __isl_keep isl_id_list *list); 273 274 #if defined(__cplusplus) 275 } 276 #endif 277 278 #endif 279