From 3f8ed2f3e4a52208a1211b9705ad11ce41a9eb07 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 3 May 2008 13:38:50 +0200 Subject: [PATCH] evalue.c: add evalue_floor2frac --- barvinok/evalue.h | 1 + evalue.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/barvinok/evalue.h b/barvinok/evalue.h index 73765c4..d4ce5f5 100644 --- a/barvinok/evalue.h +++ b/barvinok/evalue.h @@ -109,6 +109,7 @@ size_t evalue_size(evalue *e); size_t domain_size(Polyhedron *D); Enumeration* partition2enumeration(evalue *EP); void evalue_frac2floor(evalue *e); +int evalue_floor2frac(evalue *e); int evalue_frac2floor_in_domain(evalue *e, Polyhedron *D); void evalue_frac2floor2(evalue *e, int shift); int evalue_frac2floor_in_domain3(evalue *e, Polyhedron *D, int shift); diff --git a/evalue.c b/evalue.c index 4e82351..1bd9cd8 100644 --- a/evalue.c +++ b/evalue.c @@ -3291,6 +3291,35 @@ static void floor2frac(evalue *e, int nvar) reduce_evalue(e); } +int evalue_floor2frac(evalue *e) +{ + int i; + int r = 0; + + if (value_notzero_p(e->d)) + return 0; + + if (e->x.p->type == partition) { + for (i = 0; i < e->x.p->size/2; ++i) + if (evalue_floor2frac(&e->x.p->arr[2*i+1])) + reduce_evalue(&e->x.p->arr[2*i+1]); + return 0; + } + + for (i = type_offset(e->x.p); i < e->x.p->size; ++i) + r |= evalue_floor2frac(&e->x.p->arr[i]); + + if (e->x.p->type == flooring) { + floor2frac(e, 0); + return 1; + } + + if (r) + reorder_terms(e); + + return r; +} + evalue *esum_over_domain_cst(int nvar, Polyhedron *D, Matrix *C) { evalue *t; -- 2.11.4.GIT