pi_operand2ge_operand_base.cc

Go to the documentation of this file.
00001 /*!
00002         \file
00003         \brief Base for visitor returning tm_pi corresponding to a pi_pi.
00004         \author jaz
00005 */
00006 
00007 #include <lestes/backend_v2/intercode/ge.g.hh>
00008 #include <lestes/backend_v2/intercode/pi.g.hh>
00009 #include <lestes/md/instructions/pi_operand2ge_operand_base.g.hh>
00010 
00011 package(lestes);
00012 package(md);
00013 package(instructions);
00014 
00015 using namespace ::lestes::backend_v2::intercode;
00016 
00017 typedef map< srp<pi_operand>, srp<ge_operand> > pi_op2ge_op__type;
00018 
00019 /*!
00020         \brief Converts pi_operand to ge_operand.
00021         
00022         It caches results of previous conversion. So if conversion of an already converted pi_operand instance is requested,
00023         the function returns the same instance of ge_operand class as the last time.
00024         
00025         \param pi A pi_operand instance.
00026         \return A ge_operand instance.
00027 */
00028 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand_base::convert(ptr< ::lestes::backend_v2::intercode::pi_operand > pi) {
00029         ptr<ge_operand> ge;
00030 
00031         //Has pi-operand been converted to ge-operand?
00032         pi_op2ge_op__type::iterator it_ge_op = pi_op2ge_op->find(pi);
00033         
00034         if ( it_ge_op==pi_op2ge_op->end() ) {
00035                 //No, it hasn't. Convert it.
00036                 ge = pi->accept_visitor_pi_operand2ge_operand_gen_base(this);
00037                 pi_op2ge_op->insert(::std::pair<srp<pi_operand>,srp<ge_operand> >(pi, ge));
00038         } else {
00039                 //Yes, it has. Use the already converted result.
00040                 ge = it_ge_op->second;  
00041         }
00042         
00043         return ge;
00044 }
00045 
00046 end_package(instructions);
00047 end_package(md);
00048 end_package(lestes);
00049 

Generated on Mon Feb 12 18:23:07 2007 for lestes by doxygen 1.5.1-20070107