File indexing completed on 2026-05-10 08:48:19
0001 #ifndef ISL_MULTI_H
0002 #define ISL_MULTI_H
0003
0004 #include <isl/val_type.h>
0005 #include <isl/space_type.h>
0006 #include <isl/list.h>
0007 #include <isl/set_type.h>
0008
0009 #if defined(__cplusplus)
0010 extern "C" {
0011 #endif
0012
0013 #define ISL_DECLARE_MULTI(BASE) \
0014 isl_ctx *isl_multi_##BASE##_get_ctx( \
0015 __isl_keep isl_multi_##BASE *multi); \
0016 __isl_export \
0017 __isl_give isl_space *isl_multi_##BASE##_get_space( \
0018 __isl_keep isl_multi_##BASE *multi); \
0019 __isl_give isl_space *isl_multi_##BASE##_get_domain_space( \
0020 __isl_keep isl_multi_##BASE *multi); \
0021 __isl_export \
0022 __isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list( \
0023 __isl_keep isl_multi_##BASE *multi); \
0024 __isl_constructor \
0025 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list( \
0026 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
0027 __isl_export \
0028 __isl_give isl_multi_##BASE *isl_space_multi_##BASE( \
0029 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
0030 __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy( \
0031 __isl_keep isl_multi_##BASE *multi); \
0032 __isl_null isl_multi_##BASE *isl_multi_##BASE##_free( \
0033 __isl_take isl_multi_##BASE *multi); \
0034 __isl_export \
0035 isl_bool isl_multi_##BASE##_plain_is_equal( \
0036 __isl_keep isl_multi_##BASE *multi1, \
0037 __isl_keep isl_multi_##BASE *multi2); \
0038 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user( \
0039 __isl_take isl_multi_##BASE *multi); \
0040 __isl_export \
0041 isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi); \
0042 __isl_export \
0043 __isl_give isl_##BASE *isl_multi_##BASE##_get_at( \
0044 __isl_keep isl_multi_##BASE *multi, int pos); \
0045 __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE( \
0046 __isl_keep isl_multi_##BASE *multi, int pos); \
0047 __isl_export \
0048 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at( \
0049 __isl_take isl_multi_##BASE *multi, int pos, \
0050 __isl_take isl_##BASE *el); \
0051 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \
0052 __isl_take isl_multi_##BASE *multi, int pos, \
0053 __isl_take isl_##BASE *el); \
0054 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice( \
0055 __isl_take isl_multi_##BASE *multi1, unsigned pos, \
0056 __isl_take isl_multi_##BASE *multi2); \
0057 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \
0058 __isl_take isl_multi_##BASE *multi); \
0059 __isl_export \
0060 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \
0061 __isl_take isl_multi_##BASE *multi1, \
0062 __isl_take isl_multi_##BASE *multi2); \
0063 __isl_export \
0064 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \
0065 __isl_take isl_multi_##BASE *multi1, \
0066 __isl_take isl_multi_##BASE *multi2); \
0067 __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \
0068 __isl_take isl_multi_##BASE *multi); \
0069 isl_bool isl_multi_##BASE##_range_is_wrapping( \
0070 __isl_keep isl_multi_##BASE *multi); \
0071 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \
0072 __isl_take isl_multi_##BASE *multi); \
0073 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range( \
0074 __isl_take isl_multi_##BASE *multi); \
0075 __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \
0076 __isl_take isl_multi_##BASE *multi, \
0077 __isl_take isl_space *model); \
0078 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range( \
0079 __isl_take isl_multi_##BASE *multi);
0080
0081 #define ISL_DECLARE_MULTI_IDENTITY(BASE) \
0082 __isl_overload \
0083 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE( \
0084 __isl_take isl_multi_##BASE *multi); \
0085 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity( \
0086 __isl_take isl_space *space); \
0087 __isl_overload \
0088 __isl_give isl_multi_##BASE * \
0089 isl_multi_##BASE##_identity_on_domain_space( \
0090 __isl_take isl_space *space); \
0091 __isl_export \
0092 __isl_give isl_multi_##BASE * \
0093 isl_space_identity_multi_##BASE##_on_domain( \
0094 __isl_take isl_space *space);
0095
0096 #define ISL_DECLARE_MULTI_CMP(BASE) \
0097 int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1, \
0098 __isl_keep isl_multi_##BASE *multi2);
0099
0100 #define ISL_DECLARE_MULTI_ARITH(BASE) \
0101 __isl_overload \
0102 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \
0103 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
0104 __isl_overload \
0105 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val( \
0106 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
0107 __isl_overload \
0108 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \
0109 __isl_take isl_multi_##BASE *multi, \
0110 __isl_take isl_multi_val *mv); \
0111 __isl_overload \
0112 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val( \
0113 __isl_take isl_multi_##BASE *multi, \
0114 __isl_take isl_multi_val *mv); \
0115 __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \
0116 __isl_take isl_multi_##BASE *multi, \
0117 __isl_take isl_multi_val *mv); \
0118 __isl_export \
0119 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \
0120 __isl_take isl_multi_##BASE *multi1, \
0121 __isl_take isl_multi_##BASE *multi2); \
0122 __isl_export \
0123 __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \
0124 __isl_take isl_multi_##BASE *multi1, \
0125 __isl_take isl_multi_##BASE *multi2); \
0126 __isl_export \
0127 __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg( \
0128 __isl_take isl_multi_##BASE *multi);
0129
0130 #define ISL_DECLARE_MULTI_MIN_MAX(BASE) \
0131 __isl_export \
0132 __isl_give isl_multi_##BASE *isl_multi_##BASE##_min( \
0133 __isl_take isl_multi_##BASE *multi1, \
0134 __isl_take isl_multi_##BASE *multi2); \
0135 __isl_export \
0136 __isl_give isl_multi_##BASE *isl_multi_##BASE##_max( \
0137 __isl_take isl_multi_##BASE *multi1, \
0138 __isl_take isl_multi_##BASE *multi2);
0139
0140 #define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE) \
0141 __isl_overload \
0142 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val( \
0143 __isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v); \
0144 __isl_overload \
0145 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val( \
0146 __isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv);
0147
0148 #define ISL_DECLARE_MULTI_ZERO(BASE) \
0149 __isl_export \
0150 __isl_give isl_multi_##BASE *isl_multi_##BASE##_zero( \
0151 __isl_take isl_space *space); \
0152 __isl_export \
0153 __isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE( \
0154 __isl_take isl_space *space);
0155
0156 #define ISL_DECLARE_MULTI_NAN(BASE) \
0157 __isl_export \
0158 isl_bool isl_multi_##BASE##_involves_nan( \
0159 __isl_keep isl_multi_##BASE *multi);
0160
0161 #define ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
0162 isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi, \
0163 enum isl_dim_type type); \
0164 __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims( \
0165 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
0166 unsigned first, unsigned n);
0167 #define ISL_DECLARE_MULTI_DIMS(BASE) \
0168 ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
0169 isl_bool isl_multi_##BASE##_involves_dims( \
0170 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
0171 unsigned first, unsigned n); \
0172 __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims( \
0173 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
0174 unsigned first, unsigned n); \
0175 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims( \
0176 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
0177 unsigned n); \
0178 __isl_give isl_multi_##BASE * \
0179 isl_multi_##BASE##_project_domain_on_params( \
0180 __isl_take isl_multi_##BASE *multi);
0181
0182 #define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE) \
0183 __isl_export \
0184 __isl_give isl_multi_##BASE * \
0185 isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi, \
0186 __isl_take isl_space *domain);
0187
0188 #define ISL_DECLARE_MULTI_LOCALS(BASE) \
0189 __isl_export \
0190 isl_bool isl_multi_##BASE##_involves_locals( \
0191 __isl_keep isl_multi_##BASE *multi);
0192
0193 #define ISL_DECLARE_MULTI_DIM_ID(BASE) \
0194 int isl_multi_##BASE##_find_dim_by_name( \
0195 __isl_keep isl_multi_##BASE *multi, \
0196 enum isl_dim_type type, const char *name); \
0197 int isl_multi_##BASE##_find_dim_by_id( \
0198 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
0199 __isl_keep isl_id *id); \
0200 __isl_give isl_id *isl_multi_##BASE##_get_dim_id( \
0201 __isl_keep isl_multi_##BASE *multi, \
0202 enum isl_dim_type type, unsigned pos); \
0203 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name( \
0204 __isl_take isl_multi_##BASE *multi, \
0205 enum isl_dim_type type, unsigned pos, const char *s); \
0206 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id( \
0207 __isl_take isl_multi_##BASE *multi, \
0208 enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
0209
0210 #define ISL_DECLARE_MULTI_TUPLE_ID(BASE) \
0211 const char *isl_multi_##BASE##_get_tuple_name( \
0212 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
0213 __isl_export \
0214 isl_bool isl_multi_##BASE##_has_range_tuple_id( \
0215 __isl_keep isl_multi_##BASE *multi); \
0216 isl_bool isl_multi_##BASE##_has_tuple_id( \
0217 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
0218 __isl_export \
0219 __isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id( \
0220 __isl_keep isl_multi_##BASE *multi); \
0221 __isl_give isl_id *isl_multi_##BASE##_get_tuple_id( \
0222 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
0223 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name( \
0224 __isl_take isl_multi_##BASE *multi, \
0225 enum isl_dim_type type, const char *s); \
0226 __isl_overload \
0227 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id( \
0228 __isl_take isl_multi_##BASE *multi, __isl_take isl_id *id); \
0229 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id( \
0230 __isl_take isl_multi_##BASE *multi, \
0231 enum isl_dim_type type, __isl_take isl_id *id); \
0232 __isl_export \
0233 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id( \
0234 __isl_take isl_multi_##BASE *multi); \
0235 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id( \
0236 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type);
0237
0238 #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \
0239 __isl_export \
0240 __isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \
0241 __isl_take isl_multi_##BASE *multi1, \
0242 __isl_take isl_multi_##BASE *multi2); \
0243 __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice( \
0244 __isl_take isl_multi_##BASE *multi1, unsigned in_pos, \
0245 unsigned out_pos, __isl_take isl_multi_##BASE *multi2);
0246
0247 #define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE) \
0248 __isl_export \
0249 __isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain( \
0250 __isl_take isl_multi_##BASE *multi, \
0251 __isl_take isl_multi_id *tuple); \
0252 __isl_export \
0253 __isl_give isl_multi_##BASE * \
0254 isl_multi_##BASE##_bind_domain_wrapped_domain( \
0255 __isl_take isl_multi_##BASE *multi, \
0256 __isl_take isl_multi_id *tuple);
0257
0258 #define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE) \
0259 __isl_export \
0260 __isl_give isl_multi_##BASE * \
0261 isl_multi_##BASE##_unbind_params_insert_domain( \
0262 __isl_take isl_multi_##BASE *multi, \
0263 __isl_take isl_multi_id *domain);
0264
0265 #define ISL_DECLARE_MULTI_PARAM(BASE) \
0266 __isl_overload \
0267 isl_bool isl_multi_##BASE##_involves_param_id( \
0268 __isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id); \
0269 __isl_overload \
0270 isl_bool isl_multi_##BASE##_involves_param_id_list( \
0271 __isl_keep isl_multi_##BASE *multi, \
0272 __isl_keep isl_id_list *list);
0273
0274 #if defined(__cplusplus)
0275 }
0276 #endif
0277
0278 #endif