Back to home page

EIC code displayed by LXR

 
 

    


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