drop isl_div abstraction
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 9 Sep 2011 12:55:16 +0000 (14:55 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 13 Sep 2011 10:53:30 +0000 (12:53 +0200)
The isl_div abstraction has been superseded by the isl_aff abstraction,
so use that instead.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
19 files changed:
Makefile.am
doc/user.pod
include/isl/aff.h
include/isl/constraint.h
include/isl/div.h [deleted file]
include/isl/local_space.h
include/isl/map.h
include/isl/polynomial.h
include/isl/set.h
isl_aff.c
isl_constraint.c
isl_div.c [deleted file]
isl_div_private.h [deleted file]
isl_input.c
isl_local_space.c
isl_local_space_private.h
isl_map.c
isl_polynomial.c
isl_polynomial_private.h

index 9a8f877..54e079a 100644 (file)
@@ -57,8 +57,6 @@ libisl_la_SOURCES = \
        isl_dim.c \
        isl_dim_map.h \
        isl_dim_map.c \
-       isl_div.c \
-       isl_div_private.h \
        isl_equalities.c \
        isl_equalities.h \
        isl_factorization.c \
@@ -200,7 +198,6 @@ pkginclude_HEADERS = \
        include/isl/constraint.h \
        include/isl/ctx.h \
        include/isl/dim.h \
-       include/isl/div.h \
        include/isl/flow.h \
        include/isl/id.h \
        include/isl/ilp.h \
index 6376f6e..f01f2d1 100644 (file)
@@ -126,6 +126,22 @@ now take an C<isl_local_space> instead of an C<isl_space>.
 An C<isl_local_space> can be created from an C<isl_space>
 using C<isl_local_space_from_space>.
 
+=item * The C<isl_div> type has been removed.  Functions that used
+to return an C<isl_div> now return an C<isl_aff>.
+Note that the space of an C<isl_aff> is that of relation.
+When replacing a call to C<isl_div_get_coefficient> by a call to
+C<isl_aff_get_coefficient> any C<isl_dim_set> argument needs
+to be replaced by C<isl_dim_in>.
+A call to C<isl_aff_from_div> can be replaced by a call
+to C<isl_aff_floor>.
+A call to C<isl_qpolynomial_div(div)> call be replaced by
+the nested call
+
+       isl_qpolynomial_from_aff(isl_aff_floor(div))
+
+The function C<isl_constraint_div> has also been renamed
+to C<isl_constraint_get_div>.
+
 =back
 
 =head1 Installation
@@ -728,7 +744,7 @@ They can be inspected, copied and freed using the following functions.
                enum isl_dim_type type, unsigned pos, const char *s);
        __isl_give isl_space *isl_local_space_get_space(
                __isl_keep isl_local_space *ls);
-       __isl_give isl_div *isl_local_space_get_div(
+       __isl_give isl_aff *isl_local_space_get_div(
                __isl_keep isl_local_space *ls, int pos);
        __isl_give isl_local_space *isl_local_space_copy(
                __isl_keep isl_local_space *ls);
@@ -1317,20 +1333,17 @@ the following functions.
                enum isl_dim_type type, unsigned first, unsigned n);
 
 The explicit representations of the existentially quantified
-variables can be inspected using the following functions.
-Note that the user is only allowed to use these functions
+variables can be inspected using the following function.
+Note that the user is only allowed to use this function
 if the inspected set or map is the result of a call
 to C<isl_set_compute_divs> or C<isl_map_compute_divs>.
+The existentially quantified variable is equal to the floor
+of the returned affine expression.  The affine expression
+itself can be inspected using the functions in
+L<"Piecewise Quasi Affine Expressions">.
 
-       __isl_give isl_div *isl_constraint_div(
+       __isl_give isl_aff *isl_constraint_get_div(
                __isl_keep isl_constraint *constraint, int pos);
-       isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div);
-       void isl_div_get_constant(__isl_keep isl_div *div,
-               isl_int *v);
-       void isl_div_get_denominator(__isl_keep isl_div *div,
-               isl_int *v);
-       void isl_div_get_coefficient(__isl_keep isl_div *div,
-               enum isl_dim_type type, int pos, isl_int *v);
 
 To obtain the constraints of a basic set or map in matrix
 form, use the following functions.
@@ -2481,11 +2494,6 @@ The zero quasi affine expression on a given domain can be created using
 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_give isl_aff *isl_aff_from_div(__isl_take isl_div *div);
-
 An empty piecewise quasi affine expression (one with no cells)
 or a piecewise quasi affine expression with a single cell can
 be created using the following functions.
@@ -2551,7 +2559,7 @@ The expression can be inspected using
                enum isl_dim_type type, int pos, isl_int *v);
        int isl_aff_get_denominator(__isl_keep isl_aff *aff,
                isl_int *v);
-       __isl_give isl_div *isl_aff_get_div(
+       __isl_give isl_aff *isl_aff_get_div(
                __isl_keep isl_aff *aff, int pos);
 
        int isl_pw_aff_foreach_piece(__isl_keep isl_pw_aff *pwaff,
@@ -2974,8 +2982,6 @@ on the resulting quasipolynomials
        __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_on_domain(
                __isl_take isl_space *domain,
                enum isl_dim_type type, unsigned pos);
@@ -3089,7 +3095,7 @@ these functions
                isl_int *d);
        int isl_term_get_exp(__isl_keep isl_term *term,
                enum isl_dim_type type, unsigned pos);
-       __isl_give isl_div *isl_term_get_div(
+       __isl_give isl_aff *isl_term_get_div(
                __isl_keep isl_term *term, unsigned pos);
        void isl_term_free(__isl_take isl_term *term);
 
index 058b062..77a46b3 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef ISL_AFF_H
 #define ISL_AFF_H
 
-#include <isl/div.h>
 #include <isl/local_space.h>
 #include <isl/printer.h>
 #include <isl/set_type.h>
@@ -57,7 +56,7 @@ __isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff,
 int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2);
 int isl_aff_plain_is_zero(__isl_keep isl_aff *aff);
 
-__isl_give isl_div *isl_aff_get_div(__isl_keep isl_aff *aff, int pos);
+__isl_give isl_aff *isl_aff_get_div(__isl_keep isl_aff *aff, int pos);
 
 __isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff);
 __isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff);
index a701a51..bfd8989 100644 (file)
@@ -11,8 +11,8 @@
 #define ISL_CONSTRAINT_H
 
 #include <isl/local_space.h>
+#include <isl/space.h>
 #include <isl/aff_type.h>
-#include <isl/div.h>
 #include <isl/set_type.h>
 #include <isl/printer.h>
 
@@ -90,7 +90,7 @@ __isl_give isl_constraint *isl_constraint_set_coefficient_si(
        __isl_take isl_constraint *constraint,
        enum isl_dim_type type, int pos, int v);
 
-__isl_give isl_div *isl_constraint_div(__isl_keep isl_constraint *constraint,
+__isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint,
        int pos);
 
 struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint);
diff --git a/include/isl/div.h b/include/isl/div.h
deleted file mode 100644 (file)
index b4a3331..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2008-2009 Katholieke Universiteit Leuven
- *
- * Use of this software is governed by the GNU LGPLv2.1 license
- *
- * Written by Sven Verdoolaege, K.U.Leuven, Departement
- * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
- */
-
-#ifndef ISL_DIV_H
-#define ISL_DIV_H
-
-#include <isl/space.h>
-#include <isl/aff_type.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-struct isl_div;
-typedef struct isl_div isl_div;
-
-isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div);
-
-__isl_give isl_div *isl_div_alloc(__isl_take isl_space *dim);
-__isl_give isl_div *isl_div_copy(__isl_keep isl_div *div);
-void isl_div_free(struct isl_div *c);
-
-void isl_div_get_constant(__isl_keep isl_div *div, isl_int *v);
-void isl_div_get_denominator(__isl_keep isl_div *div, isl_int *v);
-void isl_div_get_coefficient(__isl_keep isl_div *div,
-       enum isl_dim_type type, int pos, isl_int *v);
-void isl_div_set_constant(struct isl_div *div, isl_int v);
-void isl_div_set_denominator(struct isl_div *div, isl_int v);
-void isl_div_set_coefficient(struct isl_div *div,
-       enum isl_dim_type type, int pos, isl_int v);
-
-unsigned isl_div_dim(__isl_keep isl_div *div, enum isl_dim_type type);
-__isl_give isl_div *isl_div_div(__isl_take isl_div *div, int pos);
-
-__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
index 74fa4a6..13d4944 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef ISL_LOCAL_SPACE_H
 #define ISL_LOCAL_SPACE_H
 
-#include <isl/div.h>
+#include <isl/aff_type.h>
+#include <isl/space.h>
 #include <isl/printer.h>
 
 #if defined(__cplusplus)
@@ -29,7 +30,7 @@ __isl_give isl_local_space *isl_local_space_set_dim_name(
        __isl_take isl_local_space *ls,
        enum isl_dim_type type, unsigned pos, const char *s);
 __isl_give isl_space *isl_local_space_get_space(__isl_keep isl_local_space *ls);
-__isl_give isl_div *isl_local_space_get_div(__isl_keep isl_local_space *ls,
+__isl_give isl_aff *isl_local_space_get_div(__isl_keep isl_local_space *ls,
        int pos);
 
 __isl_give isl_local_space *isl_local_space_domain(
index cd0de43..18492d1 100644 (file)
@@ -16,7 +16,6 @@
 #include <isl/ctx.h>
 #include <isl/blk.h>
 #include <isl/space.h>
-#include <isl/div.h>
 #include <isl/vec.h>
 #include <isl/mat.h>
 #include <isl/printer.h>
@@ -61,7 +60,8 @@ isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map);
 __isl_give isl_space *isl_basic_map_get_space(__isl_keep isl_basic_map *bmap);
 __isl_give isl_space *isl_map_get_space(__isl_keep isl_map *map);
 
-struct isl_div *isl_basic_map_div(struct isl_basic_map *bmap, int pos);
+__isl_give isl_aff *isl_basic_map_get_div(__isl_keep isl_basic_map *bmap,
+       int pos);
 
 __isl_give isl_local_space *isl_basic_map_get_local_space(
        __isl_keep isl_basic_map *bmap);
index a468845..1c88b7b 100644 (file)
@@ -4,7 +4,6 @@
 #include <isl/ctx.h>
 #include <isl/constraint.h>
 #include <isl/space.h>
-#include <isl/div.h>
 #include <isl/set_type.h>
 #include <isl/point.h>
 #include <isl/printer.h>
@@ -36,7 +35,6 @@ __isl_give isl_qpolynomial *isl_qpolynomial_neginfty_on_domain(__isl_take isl_sp
 __isl_give isl_qpolynomial *isl_qpolynomial_nan_on_domain(__isl_take isl_space *dim);
 __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(__isl_take isl_space *dim,
        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_on_domain(__isl_take isl_space *dim,
        enum isl_dim_type type, unsigned pos);
 __isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp);
@@ -110,7 +108,7 @@ void isl_term_get_num(__isl_keep isl_term *term, isl_int *n);
 void isl_term_get_den(__isl_keep isl_term *term, isl_int *d);
 int isl_term_get_exp(__isl_keep isl_term *term,
        enum isl_dim_type type, unsigned pos);
-__isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos);
+__isl_give isl_aff *isl_term_get_div(__isl_keep isl_term *term, unsigned pos);
 
 int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp,
        int (*fn)(__isl_take isl_term *term, void *user), void *user);
index 2316038..753fd32 100644 (file)
@@ -38,7 +38,8 @@ __isl_give isl_space *isl_set_get_space(__isl_keep isl_set *set);
 __isl_give isl_set *isl_set_reset_space(__isl_take isl_set *set,
        __isl_take isl_space *dim);
 
-struct isl_div *isl_basic_set_div(struct isl_basic_set *bset, int pos);
+__isl_give isl_aff *isl_basic_set_get_div(__isl_keep isl_basic_set *bset,
+       int pos);
 
 __isl_give isl_local_space *isl_basic_set_get_local_space(
        __isl_keep isl_basic_set *bset);
index 437e44f..6533468 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -521,7 +521,7 @@ __isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff,
        return aff;
 }
 
-__isl_give isl_div *isl_aff_get_div(__isl_keep isl_aff *aff, int pos)
+__isl_give isl_aff *isl_aff_get_div(__isl_keep isl_aff *aff, int pos)
 {
        if (!aff)
                return NULL;
index 428b0f3..923cf59 100644 (file)
@@ -13,7 +13,6 @@
 #include <isl_map_private.h>
 #include <isl_constraint_private.h>
 #include <isl_space_private.h>
-#include <isl_div_private.h>
 #include <isl/seq.h>
 #include <isl_aff_private.h>
 #include <isl_local_space_private.h>
@@ -366,7 +365,8 @@ void isl_constraint_get_coefficient(struct isl_constraint *constraint,
        isl_int_set(*v, constraint->v->el[pos]);
 }
 
-struct isl_div *isl_constraint_div(struct isl_constraint *constraint, int pos)
+__isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint,
+       int pos)
 {
        if (!constraint)
                return NULL;
diff --git a/isl_div.c b/isl_div.c
deleted file mode 100644 (file)
index 84913af..0000000
--- a/isl_div.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2008-2009 Katholieke Universiteit Leuven
- *
- * Use of this software is governed by the GNU LGPLv2.1 license
- *
- * Written by Sven Verdoolaege, K.U.Leuven, Departement
- * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
- */
-
-#include <isl_map_private.h>
-#include <isl_div_private.h>
-#include <isl/map.h>
-#include <isl_space_private.h>
-#include <isl/seq.h>
-#include <isl/aff.h>
-
-isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div)
-{
-       return div ? div->ctx : NULL;
-}
-
-static unsigned n(struct isl_div *d, enum isl_dim_type type)
-{
-       isl_space *dim = d->bmap->dim;
-       switch (type) {
-       case isl_dim_param:     return dim->nparam;
-       case isl_dim_in:        return dim->n_in;
-       case isl_dim_out:       return dim->n_out;
-       case isl_dim_div:       return d->bmap->n_div;
-       default:                return 0;
-       }
-}
-
-unsigned isl_div_dim(__isl_keep isl_div *div, enum isl_dim_type type)
-{
-       return n(div, type);
-}
-
-static unsigned offset(struct isl_div *d, enum isl_dim_type type)
-{
-       isl_space *dim = d->bmap->dim;
-       switch (type) {
-       case isl_dim_param: return 1 + 1;
-       case isl_dim_in:    return 1 + 1 + dim->nparam;
-       case isl_dim_out:   return 1 + 1 + dim->nparam + dim->n_in;
-       case isl_dim_div:   return 1 + 1 + dim->nparam + dim->n_in + dim->n_out;
-       default:            return 0;
-       }
-}
-
-struct isl_div *isl_basic_map_div(struct isl_basic_map *bmap, int pos)
-{
-       struct isl_div *div;
-
-       if (!bmap)
-               goto error;
-
-       isl_assert(bmap->ctx, pos < bmap->n_div, goto error);
-       
-       div = isl_alloc_type(bmap->ctx, struct isl_div);
-       if (!div)
-               goto error;
-
-       div->ctx = bmap->ctx;
-       isl_ctx_ref(div->ctx);
-       div->ref = 1;
-       div->bmap = bmap;
-       div->line = &bmap->div[pos];
-
-       return div;
-error:
-       isl_basic_map_free(bmap);
-       return NULL;
-}
-
-struct isl_div *isl_basic_set_div(struct isl_basic_set *bset, int pos)
-{
-       return isl_basic_map_div((struct isl_basic_map *)bset, pos);
-}
-
-__isl_give isl_div *isl_div_div(__isl_take isl_div *div, int pos)
-{
-       isl_basic_map *bmap;
-       if (!div)
-               return NULL;
-       bmap = isl_basic_map_copy(div->bmap);
-       isl_div_free(div);
-       return isl_basic_map_div(bmap, pos);
-}
-
-__isl_give isl_div *isl_div_alloc(__isl_take isl_space *dim)
-{
-       struct isl_basic_map *bmap;
-
-       if (!dim)
-               return NULL;
-
-       bmap = isl_basic_map_alloc_space(dim, 1, 0, 0);
-       if (!bmap)
-               return NULL;
-
-       isl_basic_map_alloc_div(bmap);
-       isl_seq_clr(bmap->div[0], 1 + 1 + isl_basic_map_total_dim(bmap));
-       return isl_basic_map_div(bmap, 0);
-}
-
-__isl_give isl_div *isl_div_copy(__isl_keep isl_div *div)
-{
-       if (!div)
-               return NULL;
-
-       div->ref++;
-       return div;
-}
-
-void isl_div_free(struct isl_div *c)
-{
-       if (!c)
-               return;
-
-       if (--c->ref > 0)
-               return;
-
-       isl_basic_map_free(c->bmap);
-       isl_ctx_deref(c->ctx);
-       free(c);
-}
-
-void isl_div_get_constant(struct isl_div *div, isl_int *v)
-{
-       if (!div)
-               return;
-       isl_int_set(*v, div->line[0][1]);
-}
-
-void isl_div_get_denominator(struct isl_div *div, isl_int *v)
-{
-       if (!div)
-               return;
-       isl_int_set(*v, div->line[0][0]);
-}
-
-void isl_div_get_coefficient(struct isl_div *div,
-       enum isl_dim_type type, int pos, isl_int *v)
-{
-       if (!div)
-               return;
-
-       isl_assert(div->ctx, pos < n(div, type), return);
-       isl_int_set(*v, div->line[0][offset(div, type) + pos]);
-}
-
-void isl_div_set_constant(struct isl_div *div, isl_int v)
-{
-       if (!div)
-               return;
-       isl_int_set(div->line[0][1], v);
-}
-
-void isl_div_set_denominator(struct isl_div *div, isl_int v)
-{
-       if (!div)
-               return;
-       isl_int_set(div->line[0][0], v);
-}
-
-void isl_div_set_coefficient(struct isl_div *div,
-       enum isl_dim_type type, int pos, isl_int v)
-{
-       if (!div)
-               return;
-
-       isl_assert(div->ctx, pos < n(div, type), return);
-       isl_int_set(div->line[0][offset(div, type) + pos], v);
-}
-
-__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div)
-{
-       isl_aff *aff;
-       int pos;
-
-       if (!div)
-               return NULL;
-
-       pos = div->line - div->bmap->div;
-       aff = isl_aff_zero_on_domain(isl_basic_map_get_local_space(div->bmap));
-       aff = isl_aff_set_coefficient_si(aff, isl_dim_div, pos, 1);
-
-       isl_div_free(div);
-       return aff;
-}
diff --git a/isl_div_private.h b/isl_div_private.h
deleted file mode 100644 (file)
index f0a88f9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <isl/div.h>
-#include <isl/map.h>
-
-struct isl_div {
-       int ref;
-       struct isl_ctx *ctx;
-
-       struct isl_basic_map    *bmap;
-       isl_int                 **line;
-};
index 031bf11..6b578eb 100644 (file)
@@ -17,7 +17,6 @@
 #include <isl_map_private.h>
 #include <isl/set.h>
 #include <isl/seq.h>
-#include <isl/div.h>
 #include <isl_stream_private.h>
 #include <isl/obj.h>
 #include "isl_polynomial_private.h"
index 26db94a..ebf222c 100644 (file)
@@ -13,6 +13,7 @@
 #include <isl_local_space_private.h>
 #include <isl_space_private.h>
 #include <isl_mat_private.h>
+#include <isl_aff_private.h>
 #include <isl/seq.h>
 
 isl_ctx *isl_local_space_get_ctx(__isl_keep isl_local_space *ls)
@@ -180,10 +181,10 @@ const char *isl_local_space_get_dim_name(__isl_keep isl_local_space *ls,
        return ls ? isl_space_get_dim_name(ls->dim, type, pos) : NULL;
 }
 
-__isl_give isl_div *isl_local_space_get_div(__isl_keep isl_local_space *ls,
+__isl_give isl_aff *isl_local_space_get_div(__isl_keep isl_local_space *ls,
        int pos)
 {
-       isl_basic_map *bmap;
+       isl_aff *aff;
 
        if (!ls)
                return NULL;
@@ -196,8 +197,11 @@ __isl_give isl_div *isl_local_space_get_div(__isl_keep isl_local_space *ls,
                isl_die(isl_local_space_get_ctx(ls), isl_error_invalid,
                        "expression of div unknown", return NULL);
 
-       bmap = isl_basic_map_from_local_space(isl_local_space_copy(ls));
-       return isl_basic_map_div(bmap, pos);
+       aff = isl_aff_alloc(isl_local_space_copy(ls));
+       if (!aff)
+               return NULL;
+       isl_seq_cpy(aff->v->el, ls->div->row[pos], aff->v->size);
+       return aff;
 }
 
 __isl_give isl_space *isl_local_space_get_space(__isl_keep isl_local_space *ls)
index 85ecfe1..4777753 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef ISL_LOCAL_SPACE_PRIVATE_H
 #define ISL_LOCAL_SPACE_PRIVATE_H
 
-#include <isl/div.h>
 #include <isl/mat.h>
 #include <isl/set.h>
 #include <isl/local_space.h>
@@ -15,6 +14,8 @@ struct isl_local_space {
 
 __isl_give isl_local_space *isl_local_space_alloc(__isl_take isl_space *dim,
        unsigned n_div);
+__isl_give isl_local_space *isl_local_space_alloc_div(__isl_take isl_space *dim,
+       __isl_take isl_mat *div);
 
 __isl_give isl_local_space *isl_local_space_add_div(
        __isl_take isl_local_space *ls, __isl_take isl_vec *div);
index f86458c..81d0638 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -9629,3 +9629,29 @@ error:
        isl_map_free(map);
        return NULL;
 }
+
+__isl_give isl_aff *isl_basic_map_get_div(__isl_keep isl_basic_map *bmap,
+       int pos)
+{
+       isl_aff *div;
+       isl_local_space *ls;
+
+       if (!bmap)
+               return NULL;
+
+       if (!isl_basic_map_divs_known(bmap))
+               isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid,
+                       "some divs are unknown", return NULL);
+
+       ls = isl_basic_map_get_local_space(bmap);
+       div = isl_local_space_get_div(ls, pos);
+       isl_local_space_free(ls);
+
+       return div;
+}
+
+__isl_give isl_aff *isl_basic_set_get_div(__isl_keep isl_basic_set *bset,
+       int pos)
+{
+       return isl_basic_map_get_div(bset, pos);
+}
index 2341bab..737eb15 100644 (file)
@@ -20,7 +20,6 @@
 #include <isl_polynomial_private.h>
 #include <isl_point_private.h>
 #include <isl_space_private.h>
-#include <isl_div_private.h>
 #include <isl_mat_private.h>
 #include <isl_range.h>
 #include <isl_local_space_private.h>
@@ -2127,57 +2126,6 @@ error:
        return NULL;
 }
 
-/* Assumes each div only depends on earlier divs.
- */
-__isl_give isl_qpolynomial *isl_qpolynomial_div_pow(__isl_take isl_div *div,
-       int power)
-{
-       struct isl_qpolynomial *qp = NULL;
-       struct isl_upoly_rec *rec;
-       struct isl_upoly_cst *cst;
-       int i, d;
-       int pos;
-
-       if (!div)
-               return NULL;
-
-       d = div->line - div->bmap->div;
-
-       pos = isl_space_dim(div->bmap->dim, isl_dim_all) + d;
-       rec = isl_upoly_alloc_rec(div->ctx, pos, 1 + power);
-       qp = isl_qpolynomial_alloc(isl_basic_map_get_space(div->bmap),
-                                  div->bmap->n_div, &rec->up);
-       if (!qp)
-               goto error;
-
-       for (i = 0; i < div->bmap->n_div; ++i)
-               isl_seq_cpy(qp->div->row[i], div->bmap->div[i], qp->div->n_col);
-
-       for (i = 0; i < 1 + power; ++i) {
-               rec->p[i] = isl_upoly_zero(div->ctx);
-               if (!rec->p[i])
-                       goto error;
-               rec->n++;
-       }
-       cst = isl_upoly_as_cst(rec->p[power]);
-       isl_int_set_si(cst->n, 1);
-
-       isl_div_free(div);
-
-       qp = reduce_divs(qp);
-
-       return qp;
-error:
-       isl_qpolynomial_free(qp);
-       isl_div_free(div);
-       return NULL;
-}
-
-__isl_give isl_qpolynomial *isl_qpolynomial_div(__isl_take isl_div *div)
-{
-       return isl_qpolynomial_div_pow(div, 1);
-}
-
 __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(
        __isl_take isl_space *dim, const isl_int n, const isl_int d)
 {
@@ -3611,11 +3559,11 @@ int isl_term_get_exp(__isl_keep isl_term *term,
        return term->pow[pos];
 }
 
-__isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos)
+__isl_give isl_aff *isl_term_get_div(__isl_keep isl_term *term, unsigned pos)
 {
-       isl_basic_map *bmap;
+       isl_local_space *ls;
+       isl_aff *aff;
        unsigned total;
-       int k;
 
        if (!term)
                return NULL;
@@ -3630,16 +3578,15 @@ __isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos)
                                        term->div->n_row) == -1,
                return NULL);
 
-       bmap = isl_basic_map_alloc_space(isl_space_copy(term->dim), 1, 0, 0);
-       if ((k = isl_basic_map_alloc_div(bmap)) < 0)
-               goto error;
+       ls = isl_local_space_alloc_div(isl_space_copy(term->dim),
+                                       isl_mat_copy(term->div));
+       aff = isl_aff_alloc(ls);
+       if (!aff)
+               return NULL;
 
-       isl_seq_cpy(bmap->div[k], term->div->row[pos], 2 + total);
+       isl_seq_cpy(aff->v->el, term->div->row[pos], aff->v->size);
 
-       return isl_basic_map_div(bmap, k);
-error:
-       isl_basic_map_free(bmap);
-       return NULL;
+       return aff;
 }
 
 __isl_give isl_term *isl_upoly_foreach_term(__isl_keep struct isl_upoly *up,
index 54d5fe8..7370731 100644 (file)
@@ -1,5 +1,4 @@
 #include <stdio.h>
-#include <isl/div.h>
 #include <isl/map.h>
 #include <isl/mat.h>
 #include <isl_morph.h>
@@ -125,8 +124,6 @@ __isl_give isl_qpolynomial *isl_qpolynomial_cst_on_domain(__isl_take isl_space *
        isl_int v);
 __isl_give isl_qpolynomial *isl_qpolynomial_var_pow_on_domain(__isl_take isl_space *dim,
        int pos, int power);
-__isl_give isl_qpolynomial *isl_qpolynomial_div_pow(__isl_take isl_div *div,
-       int power);
 int isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp);
 int isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp);