[PPL-devel] [GIT] ppl/ppl(pip): Correctly rewrote ascii_dump/ ascii_load methods for PIP_Solution_Node.
François Galea
francois.galea at uvsq.fr
Thu Nov 19 13:12:26 CET 2009
Module: ppl/ppl
Branch: pip
Commit: defe2c4b315e272850825b3f27cff90b0726eaae
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=defe2c4b315e272850825b3f27cff90b0726eaae
Author: François Galea <francois.galea at uvsq.fr>
Date: Thu Nov 19 12:30:50 2009 +0100
Correctly rewrote ascii_dump/ascii_load methods for PIP_Solution_Node.
---
src/PIP_Tree.cc | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 176 insertions(+), 9 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index ef42eee..53b24a7 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -675,11 +675,69 @@ void
PIP_Solution_Node::ascii_dump(std::ostream& s) const {
PIP_Tree_Node::ascii_dump(s);
- s << "\nvariable_tableau\n";
- tableau.s.ascii_dump(s);
+ s << "\ntableau\n";
+ tableau.ascii_dump(s);
+
+ s << "\nbasis ";
+ dimension_type basis_size = basis.size();
+ s << basis_size;
+ for (dimension_type i=0; i<basis_size; ++i)
+ s << (basis[i] ? " true" : " false");
+
+ s << "\nmapping ";
+ dimension_type mapping_size = mapping.size();
+ s << mapping_size;
+ for (dimension_type i=0; i<mapping_size; ++i)
+ s << " " << mapping[i];
+
+ s << "\nvar_row ";
+ dimension_type var_row_size = var_row.size();
+ s << var_row_size;
+ for (dimension_type i=0; i<var_row_size; ++i)
+ s << " " << var_row[i];
+
+ s << "\nvar_column ";
+ dimension_type var_column_size = var_column.size();
+ s << var_column_size;
+ for (dimension_type i=0; i<var_column_size; ++i)
+ s << " " << var_column[i];
+ s << "\n";
+
+ s << "special_equality_row " << special_equality_row << "\n";
+ s << "big_dimension " << big_dimension << "\n";
+
+ s << "sign ";
+ dimension_type sign_size = sign.size();
+ s << sign_size;
+ for (dimension_type i=0; i<sign_size; ++i) {
+ s << " ";
+ switch (sign[i]) {
+ case UNKNOWN:
+ s << "UNKNOWN";
+ break;
+ case ZERO:
+ s << "ZERO";
+ break;
+ case POSITIVE:
+ s << "POSITIVE";
+ break;
+ case NEGATIVE:
+ s << "NEGATIVE";
+ break;
+ case MIXED:
+ s << "MIXED";
+ break;
+ }
+ }
+ s << "\n";
+
+ dimension_type solution_size = solution.size();
+ s << "solution " << solution_size << "\n";
+ for (dimension_type i=0; i<solution_size; ++i)
+ solution[i].ascii_dump(s);
+ s << "\n";
- s << "\nparameter_tableau\n";
- tableau.t.ascii_dump(s);
+ s << "solution_valid " << (solution_valid ? "true" : "false") << "\n";
}
bool
@@ -688,17 +746,126 @@ PIP_Solution_Node::ascii_load(std::istream& s) {
return false;
std::string str;
- if (!(s >> str) || str != "variable_tableau")
+ if (!(s >> str) || str != "tableau")
+ return false;
+ if (!tableau.ascii_load(s))
+ return false;
+
+ if (!(s >> str) || str != "basis")
+ return false;
+ dimension_type basis_size;
+ if (!(s >> basis_size))
+ return false;
+ basis.clear();
+ for (dimension_type i=0; i<basis_size; ++i) {
+ if (!(s >> str))
+ return false;
+ bool val = false;
+ if (str == "true")
+ val = true;
+ else if (str != "false")
+ return false;
+ basis.push_back(val);
+ }
+
+ if (!(s >> str) || str != "mapping")
+ return false;
+ dimension_type mapping_size;
+ if (!(s >> mapping_size))
+ return false;
+ mapping.clear();
+ for (dimension_type i=0; i<mapping_size; ++i) {
+ dimension_type val;
+ if (!(s >> val))
+ return false;
+ mapping.push_back(val);
+ }
+
+ if (!(s >> str) || str != "var_row")
+ return false;
+ dimension_type var_row_size;
+ if (!(s >> var_row_size))
+ return false;
+ var_row.clear();
+ for (dimension_type i=0; i<var_row_size; ++i) {
+ dimension_type val;
+ if (!(s >> val))
+ return false;
+ var_row.push_back(val);
+ }
+
+ if (!(s >> str) || str != "var_column")
+ return false;
+ dimension_type var_column_size;
+ if (!(s >> var_column_size))
+ return false;
+ var_column.clear();
+ for (dimension_type i=0; i<var_column_size; ++i) {
+ dimension_type val;
+ if (!(s >> val))
+ return false;
+ var_column.push_back(val);
+ }
+
+ if (!(s >> str) || str != "special_equality_row")
return false;
- if (!tableau.s.ascii_load(s))
+ if (!(s >> special_equality_row))
return false;
- if (!(s >> str) || str != "parameter_tableau")
+ if (!(s >> str) || str != "big_dimension")
+ return false;
+ if (!(s >> big_dimension))
+ return false;
+
+ if (!(s >> str) || str != "sign")
+ return false;
+ dimension_type sign_size;
+ if (!(s >> sign_size))
+ return false;
+ sign.clear();
+ for (dimension_type i=0; i<sign_size; ++i) {
+ if (!(s >> str))
+ return false;
+ Row_Sign val;
+ if (str == "UNKNOWN")
+ val = UNKNOWN;
+ else if (str == "ZERO")
+ val = ZERO;
+ else if (str == "POSITIVE")
+ val = POSITIVE;
+ else if (str == "NEGATIVE")
+ val = NEGATIVE;
+ else if (str == "MIXED")
+ val = MIXED;
+ else
+ return false;
+ sign.push_back(val);
+ }
+
+ if (!(s >> str) || str != "solution")
+ return false;
+ dimension_type solution_size;
+ if (!(s >> solution_size))
+ return false;
+ solution.clear();
+ for (dimension_type i=0; i<solution_size; ++i) {
+ Linear_Expression val;
+ if (!val.ascii_load(s))
+ return false;
+ solution.push_back(val);
+ }
+
+ if (!(s >> str) || str != "solution_valid")
+ return false;
+ if (!(s >> str))
return false;
- if (!tableau.t.ascii_load(s))
+ if (str == "true")
+ solution_valid = true;
+ else if (str == "false")
+ solution_valid = false;
+ else
return false;
- solution_valid = false;
PPL_ASSERT(OK());
return true;
}
More information about the PPL-devel
mailing list