#ifndef ISL_MULTI_H
#define ISL_MULTI_H

#include <isl/val_type.h>
#include <isl/space_type.h>
#include <isl/list.h>
#include <isl/set_type.h>

#if defined(__cplusplus)
extern "C" {
#endif

#define ISL_DECLARE_MULTI(BASE)						\
isl_ctx *isl_multi_##BASE##_get_ctx(					\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_export								\
__isl_give isl_space *isl_multi_##BASE##_get_space(			\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_give isl_space *isl_multi_##BASE##_get_domain_space(		\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_export								\
__isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list(		\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_constructor							\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list(	\
	__isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
__isl_export								\
__isl_give isl_multi_##BASE *isl_space_multi_##BASE(			\
	__isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_copy(			\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_null isl_multi_##BASE *isl_multi_##BASE##_free(			\
	__isl_take isl_multi_##BASE *multi);				\
__isl_export								\
isl_bool isl_multi_##BASE##_plain_is_equal(				\
	__isl_keep isl_multi_##BASE *multi1,				\
	__isl_keep isl_multi_##BASE *multi2);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user(		\
	__isl_take isl_multi_##BASE *multi);				\
__isl_export								\
isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi);	\
__isl_export								\
__isl_give isl_##BASE *isl_multi_##BASE##_get_at(			\
	__isl_keep isl_multi_##BASE *multi, int pos);			\
__isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE(			\
	__isl_keep isl_multi_##BASE *multi, int pos);			\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at(			\
	__isl_take isl_multi_##BASE *multi, int pos,			\
	__isl_take isl_##BASE *el);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE(		\
	__isl_take isl_multi_##BASE *multi, int pos,			\
	__isl_take isl_##BASE *el);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice(		\
	__isl_take isl_multi_##BASE *multi1, unsigned pos,		\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range(		\
	__isl_take isl_multi_##BASE *multi);				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product(	\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product(		\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range(		\
	__isl_take isl_multi_##BASE *multi);				\
isl_bool isl_multi_##BASE##_range_is_wrapping(				\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain(	\
	__isl_take isl_multi_##BASE *multi);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range(	\
	__isl_take isl_multi_##BASE *multi);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params(		\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_space *model);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range(		\
	__isl_take isl_multi_##BASE *multi);

#define ISL_DECLARE_MULTI_IDENTITY(BASE)				\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE(	\
	__isl_take isl_multi_##BASE *multi);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_identity(		\
	__isl_take isl_space *space);					\
__isl_overload								\
__isl_give isl_multi_##BASE *						\
isl_multi_##BASE##_identity_on_domain_space(				\
	__isl_take isl_space *space);					\
__isl_export								\
__isl_give isl_multi_##BASE *						\
isl_space_identity_multi_##BASE##_on_domain(				\
	__isl_take isl_space *space);

#define ISL_DECLARE_MULTI_CMP(BASE)					\
int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1,	\
	__isl_keep isl_multi_##BASE *multi2);

#define ISL_DECLARE_MULTI_ARITH(BASE)					\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val(		\
	__isl_take isl_multi_##BASE *multi, __isl_take isl_val *v);	\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val(		\
	__isl_take isl_multi_##BASE *multi, __isl_take isl_val *v);	\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val(	\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_val *mv);					\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val(	\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_val *mv);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val(		\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_val *mv);					\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_add(			\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_sub(			\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_neg(		 	\
	__isl_take isl_multi_##BASE *multi);

#define ISL_DECLARE_MULTI_MIN_MAX(BASE)					\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_min(			\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_max(			\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);

#define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE)				\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val(	\
	__isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v);	\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val(	\
	__isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv);

#define ISL_DECLARE_MULTI_ZERO(BASE)					\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_zero(			\
	__isl_take isl_space *space);					\
__isl_export								\
__isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE(		\
	__isl_take isl_space *space);

#define ISL_DECLARE_MULTI_NAN(BASE)					\
__isl_export								\
isl_bool isl_multi_##BASE##_involves_nan(				\
	__isl_keep isl_multi_##BASE *multi);

#define ISL_DECLARE_MULTI_DROP_DIMS(BASE)				\
isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi,	\
	enum isl_dim_type type);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims(		\
	__isl_take isl_multi_##BASE *multi, enum isl_dim_type type,	\
	unsigned first, unsigned n);
#define ISL_DECLARE_MULTI_DIMS(BASE)					\
ISL_DECLARE_MULTI_DROP_DIMS(BASE)					\
isl_bool isl_multi_##BASE##_involves_dims(				\
	__isl_keep isl_multi_##BASE *multi, enum isl_dim_type type,	\
	unsigned first, unsigned n);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims(		\
	__isl_take isl_multi_##BASE *multi, enum isl_dim_type type,	\
	unsigned first, unsigned n);					\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims(		\
	__isl_take isl_multi_##BASE *multi, enum isl_dim_type type,	\
	unsigned n);							\
__isl_give isl_multi_##BASE *						\
isl_multi_##BASE##_project_domain_on_params(				\
	__isl_take isl_multi_##BASE *multi);

#define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE)				\
__isl_export								\
__isl_give isl_multi_##BASE *						\
isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi,	\
	__isl_take isl_space *domain);

#define ISL_DECLARE_MULTI_LOCALS(BASE)					\
__isl_export								\
isl_bool isl_multi_##BASE##_involves_locals(				\
	__isl_keep isl_multi_##BASE *multi);

#define ISL_DECLARE_MULTI_DIM_ID(BASE)					\
int isl_multi_##BASE##_find_dim_by_name(				\
	__isl_keep isl_multi_##BASE *multi,				\
	enum isl_dim_type type, const char *name);			\
int isl_multi_##BASE##_find_dim_by_id(					\
	__isl_keep isl_multi_##BASE *multi, enum isl_dim_type type,	\
	__isl_keep isl_id *id);						\
__isl_give isl_id *isl_multi_##BASE##_get_dim_id(			\
	__isl_keep isl_multi_##BASE *multi,				\
	enum isl_dim_type type, unsigned pos);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name(		\
	__isl_take isl_multi_##BASE *multi,				\
	enum isl_dim_type type, unsigned pos, const char *s);		\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id(		\
	__isl_take isl_multi_##BASE *multi,				\
	enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);

#define ISL_DECLARE_MULTI_TUPLE_ID(BASE)				\
const char *isl_multi_##BASE##_get_tuple_name(				\
	__isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);	\
__isl_export								\
isl_bool isl_multi_##BASE##_has_range_tuple_id(				\
	__isl_keep isl_multi_##BASE *multi);				\
isl_bool isl_multi_##BASE##_has_tuple_id(				\
	__isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);	\
__isl_export								\
__isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id(		\
	__isl_keep isl_multi_##BASE *multi);				\
__isl_give isl_id *isl_multi_##BASE##_get_tuple_id(			\
	__isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);	\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name(		\
	__isl_take isl_multi_##BASE *multi,				\
	enum isl_dim_type type, const char *s);				\
__isl_overload								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id(	\
	__isl_take isl_multi_##BASE *multi,  __isl_take isl_id *id);	\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id(		\
	__isl_take isl_multi_##BASE *multi,				\
	enum isl_dim_type type, __isl_take isl_id *id);			\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id(	\
	__isl_take isl_multi_##BASE *multi);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id(		\
	__isl_take isl_multi_##BASE *multi, enum isl_dim_type type);

#define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE)				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_product(		\
	__isl_take isl_multi_##BASE *multi1,				\
	__isl_take isl_multi_##BASE *multi2);				\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_splice(			\
	__isl_take isl_multi_##BASE *multi1, unsigned in_pos,		\
	unsigned out_pos, __isl_take isl_multi_##BASE *multi2);

#define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE)				\
__isl_export								\
__isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain(		\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_id *tuple);				\
__isl_export								\
__isl_give isl_multi_##BASE *						\
isl_multi_##BASE##_bind_domain_wrapped_domain(				\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_id *tuple);

#define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE)				\
__isl_export								\
__isl_give isl_multi_##BASE *						\
isl_multi_##BASE##_unbind_params_insert_domain(				\
	__isl_take isl_multi_##BASE *multi,				\
	__isl_take isl_multi_id *domain);

#define ISL_DECLARE_MULTI_PARAM(BASE)					\
__isl_overload								\
isl_bool isl_multi_##BASE##_involves_param_id(				\
	__isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id);	\
__isl_overload								\
isl_bool isl_multi_##BASE##_involves_param_id_list(			\
	__isl_keep isl_multi_##BASE *multi,				\
	__isl_keep isl_id_list *list);

#if defined(__cplusplus)
}
#endif

#endif
