[PPL-devel] Last problem (hope!)

Enrico Oliosi enrico.oliosi at students.univr.it
Wed Aug 18 13:09:15 CEST 2004


Sorry,
my explanation has not been exhaustive.
I attach two files, one compiles and the other doesn't.

Hope that this is more clareful!

Thanks,
     Enrico.
-------------- next part --------------
#include "ppl_test.hh"
#include <string>
#include <fstream>
#include <iostream>
#include <map>

using namespace std;
using namespace Parma_Polyhedra_Library;
using namespace Parma_Polyhedra_Library::IO_Operators;


map<dimension_type, string> var_to_print;
map<dimension_type, string>::iterator iter;

void my_output_function(ostream& s, const Variable v) {
  //s << "x" << v.id();
  iter = var_to_print.find(v.id());
  s << iter->second;
}

void myprint_constraints(const ConSys& cs, const string& intro, ostream& s){
  using namespace IO_Operators;
  
  //Save the default output function.
  Variable::Output_Function_Type* p_default_output_function
    = Variable::get_output_function();    
  // Install an alternate output function.
  Variable::set_output_function(my_output_function);
  
  if (!intro.empty())
    s << intro << endl;
  ConSys::const_iterator i = cs.begin();
  ConSys::const_iterator cs_end = cs.end();
  bool printed_something = i != cs_end;
  while (i != cs_end) {
    s << *i++;
    if (i != cs_end)
      s << "," << endl;
  }
  s << (printed_something ? "." : "true.") << endl;
  Variable::set_output_function(p_default_output_function);
  
}    

int main()  {

  var_to_print.insert(pair< dimension_type,string>(0, "var_fst"));
  var_to_print.insert(pair< dimension_type,string>(1, "var_snd"));
  var_to_print.insert(pair< dimension_type,string>(2, "var_trd"));

  Variable a(0);
  Variable b(1);
  Variable c(2);

  C_Polyhedron ph(3);

  ph.add_constraint(a == 1);
  ph.add_constraint(b >= 1);
  
  myprint_constraints(ph.constraints(),"poliedro",cout);

  ph.add_constraint(c == a + 3);
  
  myprint_constraints(ph.constraints(),"poliedro",cout);
  
  /*
  // Check that the installation worked as expected.
  if (Variable::get_output_function() != my_output_function)
    return 1;
  // Restore the default output function.
  Variable::set_output_function(p_default_output_function);  
  // Check that the restoration worked as expected.
  if (Variable::get_output_function() != p_default_output_function)
    return 1;
  */

  return 0;
}

-------------- next part --------------
#include "ppl_test.hh"
#include <string>
#include <fstream>
#include <iostream>
#include <map>

using namespace std;
using namespace Parma_Polyhedra_Library;
using namespace Parma_Polyhedra_Library::IO_Operators;

class Cmd{
public:

  map<dimension_type, string> var_to_print;
public:  

  Cmd::Cmd(map<dimension_type, string> vartoprint){
    this-> var_to_print =  vartoprint;
  }

  void my_output_function(ostream& s, const Variable v) {
    map<dimension_type, string>::iterator iter;
    iter = var_to_print.find(v.id());
    s << iter->second;
  }
  
  void myprint_constraints(const ConSys& cs, const string& intro, ostream& s){
    using namespace IO_Operators;

    //Save the default output function.
    Variable::Output_Function_Type* p_default_output_function
      = Variable::get_output_function();    
    // Install an alternate output function.
    Variable::set_output_function(my_output_function);
    
    
    if (!intro.empty())
      s << intro << endl;
    ConSys::const_iterator i = cs.begin();
    ConSys::const_iterator cs_end = cs.end();
    bool printed_something = i != cs_end;
    while (i != cs_end) {
      s << *i++;
      if (i != cs_end)
	s << "," << endl;
    }
    s << (printed_something ? "." : "true.") << endl;

    Variable::set_output_function(p_default_output_function);

  }    
};

int main()  {

  map<dimension_type, string> var_to_print;

  var_to_print.insert(pair< dimension_type,string>(0, "var_fst"));
  var_to_print.insert(pair< dimension_type,string>(1, "var_snd"));
  var_to_print.insert(pair< dimension_type,string>(2, "var_trd"));

  Cmd comando(var_to_print);

  Variable a(0);
  Variable b(1);
  Variable c(2);

  C_Polyhedron ph(3);

  ph.add_constraint(a == 1);
  ph.add_constraint(b >= 1);

  comando.myprint_constraints(ph.constraints(),"poliedro",cout);

  ph.add_constraint(c == a + 3);

  comando.myprint_constraints(ph.constraints(),"poliedro",cout);

  return 0;
}



More information about the PPL-devel mailing list