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 unsigned isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi, \ 15 enum isl_dim_type type); \ 16 isl_ctx *isl_multi_##BASE##_get_ctx( \ 17 __isl_keep isl_multi_##BASE *multi); \ 18 __isl_give isl_space *isl_multi_##BASE##_get_space( \ 19 __isl_keep isl_multi_##BASE *multi); \ 20 __isl_give isl_space *isl_multi_##BASE##_get_domain_space( \ 21 __isl_keep isl_multi_##BASE *multi); \ 22 int isl_multi_##BASE##_find_dim_by_name( \ 23 __isl_keep isl_multi_##BASE *multi, \ 24 enum isl_dim_type type, const char *name); \ 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_give isl_multi_##BASE *isl_multi_##BASE##_zero( \ 28 __isl_take isl_space *space); \ 29 __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy( \ 30 __isl_keep isl_multi_##BASE *multi); \ 31 __isl_null isl_multi_##BASE *isl_multi_##BASE##_free( \ 32 __isl_take isl_multi_##BASE *multi); \ 33 isl_bool isl_multi_##BASE##_plain_is_equal( \ 34 __isl_keep isl_multi_##BASE *multi1, \ 35 __isl_keep isl_multi_##BASE *multi2); \ 36 isl_bool isl_multi_##BASE##_involves_nan( \ 37 __isl_keep isl_multi_##BASE *multi); \ 38 int isl_multi_##BASE##_find_dim_by_id( \ 39 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \ 40 __isl_keep isl_id *id); \ 41 __isl_give isl_id *isl_multi_##BASE##_get_dim_id( \ 42 __isl_keep isl_multi_##BASE *multi, \ 43 enum isl_dim_type type, unsigned pos); \ 44 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name( \ 45 __isl_take isl_multi_##BASE *multi, \ 46 enum isl_dim_type type, unsigned pos, const char *s); \ 47 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id( \ 48 __isl_take isl_multi_##BASE *multi, \ 49 enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); \ 50 const char *isl_multi_##BASE##_get_tuple_name( \ 51 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 52 isl_bool isl_multi_##BASE##_has_tuple_id( \ 53 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 54 __isl_give isl_id *isl_multi_##BASE##_get_tuple_id( \ 55 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \ 56 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name( \ 57 __isl_take isl_multi_##BASE *multi, \ 58 enum isl_dim_type type, const char *s); \ 59 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id( \ 60 __isl_take isl_multi_##BASE *multi, \ 61 enum isl_dim_type type, __isl_take isl_id *id); \ 62 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id( \ 63 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type); \ 64 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user( \ 65 __isl_take isl_multi_##BASE *multi); \ 66 __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims( \ 67 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 68 unsigned first, unsigned n); \ 69 __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE( \ 70 __isl_keep isl_multi_##BASE *multi, int pos); \ 71 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \ 72 __isl_take isl_multi_##BASE *multi, int pos, \ 73 __isl_take isl_##BASE *el); \ 74 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice( \ 75 __isl_take isl_multi_##BASE *multi1, unsigned pos, \ 76 __isl_take isl_multi_##BASE *multi2); \ 77 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \ 78 __isl_take isl_multi_##BASE *multi); \ 79 __isl_export \ 80 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \ 81 __isl_take isl_multi_##BASE *multi1, \ 82 __isl_take isl_multi_##BASE *multi2); \ 83 __isl_export \ 84 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \ 85 __isl_take isl_multi_##BASE *multi1, \ 86 __isl_take isl_multi_##BASE *multi2); \ 87 __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \ 88 __isl_take isl_multi_##BASE *multi); \ 89 isl_bool isl_multi_##BASE##_range_is_wrapping( \ 90 __isl_keep isl_multi_##BASE *multi); \ 91 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \ 92 __isl_take isl_multi_##BASE *multi); \ 93 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range( \ 94 __isl_take isl_multi_##BASE *multi); \ 95 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \ 96 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \ 97 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val( \ 98 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \ 99 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \ 100 __isl_take isl_multi_##BASE *multi, \ 101 __isl_take isl_multi_val *mv); \ 102 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val( \ 103 __isl_take isl_multi_##BASE *multi, \ 104 __isl_take isl_multi_val *mv); \ 105 __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \ 106 __isl_take isl_multi_##BASE *multi, \ 107 __isl_take isl_multi_val *mv); \ 108 __isl_export \ 109 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \ 110 __isl_take isl_multi_##BASE *multi1, \ 111 __isl_take isl_multi_##BASE *multi2); \ 112 __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \ 113 __isl_take isl_multi_##BASE *multi1, \ 114 __isl_take isl_multi_##BASE *multi2); \ 115 __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \ 116 __isl_take isl_multi_##BASE *multi, \ 117 __isl_take isl_space *model); \ 118 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range( \ 119 __isl_take isl_multi_##BASE *multi); 120 121 #define ISL_DECLARE_MULTI_CMP(BASE) \ 122 int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1, \ 123 __isl_keep isl_multi_##BASE *multi2); 124 125 #define ISL_DECLARE_MULTI_NEG(BASE) \ 126 __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg( \ 127 __isl_take isl_multi_##BASE *multi); 128 129 #define ISL_DECLARE_MULTI_DIMS(BASE) \ 130 isl_bool isl_multi_##BASE##_involves_dims( \ 131 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \ 132 unsigned first, unsigned n); \ 133 __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims( \ 134 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 135 unsigned first, unsigned n); \ 136 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims( \ 137 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \ 138 unsigned n); \ 139 __isl_give isl_multi_##BASE * \ 140 isl_multi_##BASE##_project_domain_on_params( \ 141 __isl_take isl_multi_##BASE *multi); 142 143 #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \ 144 __isl_export \ 145 __isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \ 146 __isl_take isl_multi_##BASE *multi1, \ 147 __isl_take isl_multi_##BASE *multi2); \ 148 __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice( \ 149 __isl_take isl_multi_##BASE *multi1, unsigned in_pos, \ 150 unsigned out_pos, __isl_take isl_multi_##BASE *multi2); 151 152 #if defined(__cplusplus) 153 } 154 #endif 155 156 #endif 157