From 84133f73eb31fc7983841803fe93428968232939 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 2 Apr 2008 12:39:02 +0200 Subject: [PATCH] occ: add dump for dumping in barvinok_enumerate_e format --- omega/convert.cc | 21 +++++++++++++++++++++ omega/convert.h | 1 + omega/parser.l | 1 + omega/parser.y | 6 ++++++ 4 files changed, 29 insertions(+) diff --git a/omega/convert.cc b/omega/convert.cc index 68f0133..b8a6be1 100644 --- a/omega/convert.cc +++ b/omega/convert.cc @@ -94,3 +94,24 @@ Relation Polyhedron2relation(Polyhedron *P, r.finalize(); return r; } + +void dump(Relation& r) +{ + varvector vv; + varvector params; + Polyhedron *D = relation2Domain(r, vv, params); + unsigned dim = r.is_set() ? r.n_set() : r.n_inp() + r.n_out(); + + if (D->next) { + fprintf(stderr, "Unions not supported\n"); + } else { + unsigned exist = D->Dimension - params.size() - dim; + Polyhedron_PrintConstraints(stdout, P_VALUE_FMT, D); + fprintf(stdout, "\nE %d\nP %d\n\n", exist, params.size()); + for (int i = 0; i < params.size(); ++i) + fprintf(stdout, "%s ", params[i]->char_name()); + fprintf(stdout, "\n"); + } + + Domain_Free(D); +} diff --git a/omega/convert.h b/omega/convert.h index 1e3547e..9e5e199 100644 --- a/omega/convert.h +++ b/omega/convert.h @@ -7,3 +7,4 @@ typedef std::vector varvector; Polyhedron *relation2Domain(Relation& r, varvector& vv, varvector& params); Relation Polyhedron2relation(Polyhedron *P, unsigned exist, unsigned nparam, char **params); +void dump(Relation& r); diff --git a/omega/parser.l b/omega/parser.l index 47deab3..b825d4a 100644 --- a/omega/parser.l +++ b/omega/parser.l @@ -203,6 +203,7 @@ void includeFile(char *s) { "ranking" { BUFFER; return RANKING; } "count_lexsmaller" { BUFFER; return COUNT_LEXSMALLER; } "vertices" { BUFFER; return VERTICES; } +"dump" { BUFFER; return DUMP; } "&" { BUFFER; return AND; } "|" { BUFFER; return OR; } "&&" { BUFFER; return AND; } diff --git a/omega/parser.y b/omega/parser.y index 4ef3d0f..e85a5c9 100644 --- a/omega/parser.y +++ b/omega/parser.y @@ -23,6 +23,7 @@ #include "count.h" #include "vertices.h" #include "polyfunc.h" +#include "convert.h" #define CALC_VERSION_STRING "Omega Calculator v1.2" @@ -109,6 +110,7 @@ Map *variableMap; %token CARD RANKING COUNT_LEXSMALLER %token VERTICES %token BMAX +%token DUMP %token PARSE_EXPRESSION PARSE_FORMULA PARSE_RELATION @@ -129,6 +131,7 @@ Map *variableMap; %left '(' OMEGA_P10 %right CARD RANKING COUNT_LEXSMALLER %right VERTICES +%right DUMP %type effort @@ -552,6 +555,9 @@ printf("was substantially faster on the limited domain it handled.\n"); delete relationDecl; delete variableMap; } + | DUMP relation ';' { + dump(*$2); + } ; relTripList: relTripList ',' relation ':' relation ':' relation -- 2.11.4.GIT