Some of the old names have been kept for backward compatibility,
but they will be removed in the future.
+=item * Spaces of maps, sets and parameter domains are now
+treated differently. The distinction between map spaces and set spaces
+has always been made on a conceptual level, but proper use of such spaces
+was never checked. Furthermore, up until isl-0.07 there was no way
+of explicitly creating a parameter space. These can now be created
+directly using C<isl_space_params_alloc> or from other spaces using
+C<isl_space_params>.
+
+=item * The space in which C<isl_aff>, C<isl_pw_aff>, C<isl_qpolynomial>,
+C<isl_pw_qpolynomial>, C<isl_qpolynomial_fold> and C<isl_pw_qpolynomial_fold>
+objects live is now a map space
+instead of a set space. This means, for example, that the dimensions
+of the domain of an C<isl_aff> are now considered to be of type
+C<isl_dim_in> instead of C<isl_dim_set>. Extra functions have been
+added to obtain the domain space. Some of the constructors still
+take a domain space and have therefore been renamed.
+
=back
=head1 Installation
C<isl_dim_out> (only for relations), C<isl_dim_set>
(only for sets) or C<isl_dim_all>.
+To check whether a given space is that of a set or a map
+or whether it is a parameter space, use these functions:
+
+ #include <isl/space.h>
+ int isl_space_is_params(__isl_keep isl_space *space);
+ int isl_space_is_set(__isl_keep isl_space *space);
+
It is often useful to create objects that live in the
same space as some other object. This can be accomplished
by creating the new objects
__isl_keep isl_constraint *constraint);
#include <isl/polynomial.h>
+ __isl_give isl_space *isl_qpolynomial_get_domain_space(
+ __isl_keep isl_qpolynomial *qp);
__isl_give isl_space *isl_qpolynomial_get_space(
__isl_keep isl_qpolynomial *qp);
__isl_give isl_space *isl_qpolynomial_fold_get_space(
__isl_keep isl_qpolynomial_fold *fold);
+ __isl_give isl_space *isl_pw_qpolynomial_get_domain_space(
+ __isl_keep isl_pw_qpolynomial *pwqp);
__isl_give isl_space *isl_pw_qpolynomial_get_space(
__isl_keep isl_pw_qpolynomial *pwqp);
+ __isl_give isl_space *isl_pw_qpolynomial_fold_get_domain_space(
+ __isl_keep isl_pw_qpolynomial_fold *pwf);
+ __isl_give isl_space *isl_pw_qpolynomial_fold_get_space(
+ __isl_keep isl_pw_qpolynomial_fold *pwf);
__isl_give isl_space *isl_union_pw_qpolynomial_get_space(
__isl_keep isl_union_pw_qpolynomial *upwqp);
__isl_give isl_space *isl_union_pw_qpolynomial_fold_get_space(
__isl_keep isl_union_pw_qpolynomial_fold *upwf);
#include <isl/aff.h>
+ __isl_give isl_space *isl_aff_get_domain_space(
+ __isl_keep isl_aff *aff);
__isl_give isl_space *isl_aff_get_space(
__isl_keep isl_aff *aff);
+ __isl_give isl_space *isl_pw_aff_get_domain_space(
+ __isl_keep isl_pw_aff *pwaff);
__isl_give isl_space *isl_pw_aff_get_space(
__isl_keep isl_pw_aff *pwaff);
#include <isl/local_space.h>
isl_ctx *isl_local_space_get_ctx(
__isl_keep isl_local_space *ls);
+ int isl_local_space_is_set(__isl_keep isl_local_space *ls);
int isl_local_space_dim(__isl_keep isl_local_space *ls,
enum isl_dim_type type);
const char *isl_local_space_get_dim_name(
Local spaces can be created from other local spaces
using the following functions.
+ __isl_give isl_local_space *isl_local_space_domain(
+ __isl_take isl_local_space *ls);
__isl_give isl_local_space *isl_local_space_from_domain(
__isl_take isl_local_space *ls);
__isl_give isl_local_space *isl_local_space_add_dims(
Check if the relation obviously lies on a hyperplane where the given dimension
has a fixed value and if so, return that value in C<*val>.
+=item * Space
+
+To check whether a set is a parameter domain, use this function:
+
+ int isl_set_is_params(__isl_keep isl_set *set);
+
=item * Wrapping
The following functions check whether the domain of the given
enum isl_dim_type type, unsigned first, unsigned n);
__isl_give isl_map *isl_map_project_out(__isl_take isl_map *map,
enum isl_dim_type type, unsigned first, unsigned n);
+ __isl_give isl_basic_set *isl_basic_set_params(
+ __isl_take isl_basic_set *bset);
__isl_give isl_basic_set *isl_basic_map_domain(
__isl_take isl_basic_map *bmap);
__isl_give isl_basic_set *isl_basic_map_range(
__isl_take isl_basic_map *bmap);
+ __isl_give isl_set *isl_set_params(__isl_take isl_set *set);
__isl_give isl_set *isl_map_domain(
__isl_take isl_map *bmap);
__isl_give isl_set *isl_map_range(
__isl_take isl_basic_set *context);
__isl_give isl_set *isl_set_gist(__isl_take isl_set *set,
__isl_take isl_set *context);
+ __isl_give isl_set *isl_set_gist_params(
+ __isl_take isl_set *set,
+ __isl_take isl_set *context);
__isl_give isl_union_set *isl_union_set_gist(
__isl_take isl_union_set *uset,
__isl_take isl_union_set *context);
__isl_take isl_basic_map *context);
__isl_give isl_map *isl_map_gist(__isl_take isl_map *map,
__isl_take isl_map *context);
+ __isl_give isl_map *isl_map_gist_params(
+ __isl_take isl_map *map,
+ __isl_take isl_set *context);
__isl_give isl_union_map *isl_union_map_gist(
__isl_take isl_union_map *umap,
__isl_take isl_union_map *context);
=head2 Piecewise Quasi Affine Expressions
-The zero quasi affine expression can be created using
+The zero quasi affine expression on a given domain can be created using
- __isl_give isl_aff *isl_aff_zero(
+ __isl_give isl_aff *isl_aff_zero_on_domain(
__isl_take isl_local_space *ls);
+Note that the space in which the resulting object lives is a map space
+with the given space as domain and a one-dimensional range.
+
A quasi affine expression can also be initialized from an C<isl_div>:
#include <isl/div.h>
isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff);
int isl_aff_dim(__isl_keep isl_aff *aff,
enum isl_dim_type type);
+ __isl_give isl_local_space *isl_aff_get_domain_local_space(
+ __isl_keep isl_aff *aff);
__isl_give isl_local_space *isl_aff_get_local_space(
__isl_keep isl_aff *aff);
const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff,
operations such as addition and multiplication
on the resulting quasipolynomials
- __isl_give isl_qpolynomial *isl_qpolynomial_zero(
- __isl_take isl_space *dim);
- __isl_give isl_qpolynomial *isl_qpolynomial_one(
- __isl_take isl_space *dim);
- __isl_give isl_qpolynomial *isl_qpolynomial_infty(
- __isl_take isl_space *dim);
- __isl_give isl_qpolynomial *isl_qpolynomial_neginfty(
- __isl_take isl_space *dim);
- __isl_give isl_qpolynomial *isl_qpolynomial_nan(
- __isl_take isl_space *dim);
- __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst(
- __isl_take isl_space *dim,
+ __isl_give isl_qpolynomial *isl_qpolynomial_zero_on_domain(
+ __isl_take isl_space *domain);
+ __isl_give isl_qpolynomial *isl_qpolynomial_one_on_domain(
+ __isl_take isl_space *domain);
+ __isl_give isl_qpolynomial *isl_qpolynomial_infty_on_domain(
+ __isl_take isl_space *domain);
+ __isl_give isl_qpolynomial *isl_qpolynomial_neginfty_on_domain(
+ __isl_take isl_space *domain);
+ __isl_give isl_qpolynomial *isl_qpolynomial_nan_on_domain(
+ __isl_take isl_space *domain);
+ __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(
+ __isl_take isl_space *domain,
const isl_int n, const isl_int d);
__isl_give isl_qpolynomial *isl_qpolynomial_div(
__isl_take isl_div *div);
- __isl_give isl_qpolynomial *isl_qpolynomial_var(
- __isl_take isl_space *dim,
+ __isl_give isl_qpolynomial *isl_qpolynomial_var_on_domain(
+ __isl_take isl_space *domain,
enum isl_dim_type type, unsigned pos);
__isl_give isl_qpolynomial *isl_qpolynomial_from_aff(
__isl_take isl_aff *aff);
+Note that the space in which a quasipolynomial lives is a map space
+with a one-dimensional range. The C<domain> argument in some of
+the functions above corresponds to the domain of this map space.
+
The zero piecewise quasipolynomial or a piecewise quasipolynomial
with a single cell can be created using the following functions.
Multiple of these single cell piecewise quasipolynomials can
__isl_take isl_qpolynomial *qp,
__isl_take isl_space *model);
+ __isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params(
+ __isl_take isl_qpolynomial *qp);
+ __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_domain_on_params(
+ __isl_take isl_pw_qpolynomial *pwqp);
+
__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce(
__isl_take isl_union_pw_qpolynomial *upwqp);
__isl_take isl_union_pw_qpolynomial_fold *upwf,
__isl_take isl_union_set *uset);
+ __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_project_domain_on_params(
+ __isl_take isl_pw_qpolynomial_fold *pwf);
+
__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce(
__isl_take isl_pw_qpolynomial_fold *pwf);