lestes::backend_v2::workers::order_governor Class Reference

Linearizes pseudopinstructions within function's body. More...

#include <order_governor.g.hh>

Inheritance diagram for lestes::backend_v2::workers::order_governor:

lestes::backend_v2::workers::worker_base lestes::std::object lestes::std::mem::keystone List of all members.

Public Types

typedef ulint level_t

Public Member Functions

ptr< ::lestes::std::list<
srp< ::lestes::backend_v2::intercode::pi_pi > > > 
pis_ordered_get () const
 The method pis_ordered_get returns the value of the field order_governor::pis_ordered.
void pis_ordered_set (const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > &)
 The method pis_ordered_set sets the field order_governor::pis_ordered to the given value.
ptr< ::lestes::std::list<
srp< ::lestes::backend_v2::intercode::pi_pi > > > 
pis_unordered_get () const
 The method pis_unordered_get returns the value of the field order_governor::pis_unordered.
void pis_unordered_set (const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > &)
 The method pis_unordered_set sets the field order_governor::pis_unordered to the given value.
ptr< ::lestes::std::map< srp<
::lestes::backend_v2::intercode::pi_pi >,
bool > > 
is_ordered_get () const
 The method is_ordered_get returns the value of the field order_governor::is_ordered.
void is_ordered_set (const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > &)
 The method is_ordered_set sets the field order_governor::is_ordered to the given value.
void process ()
 Manages linearization.
ptr< ::lestes::backend_v2::structs::func_dataget_result ()
 Returns func_data with linearized pseudoinstructions.
void merge_ordered_with_unordered_level_X (level_t level_to_merge)
 Merges unordered pseudoinstructions of given level with ordered pseudoinstructions.
void torder_ordered ()
 Linearizes pis_ordered list.
bool pi_operands_origins_ordered (ptr< vector< srp< ::lestes::backend_v2::intercode::pi_operand > > > operand_list)
 Tells whether origin of each operand in list is ordered.
void renumber_levels (ptr< list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pi_list)
 Decrease by 1 level of pseudoinstructions in a list.
bool nsp_for_any (ptr< ::lestes::backend_v2::intercode::pi_pi > sp, ptr< list< srp< ::lestes::backend_v2::intercode::pi_pi > > > list)
 Tells whether a sequencepoint is psp for any of pseudoinstructions in a list.
void identify_level_0 ()
 Moves pseudoinstructions of level 0 from pis_unordered to pis_ordered list.
void linearize_ordered_sps ()
 Linearizes sequencepoints in pis_ordered list.
void shift_unordered_nsp_psp ()
 Shifts psp and nsp of pis_unordered pseudoinstructions.
lint get_pi_level (ptr< ::lestes::backend_v2::intercode::pi_pi > pi)
 Returns level of a pi_pi pseudoinstruction.
ptr< ::lestes::backend_v2::intercode::pi_piconjugated_chain_end_find (ptr< ::lestes::backend_v2::intercode::pi_pi > pi)
 Gets last pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.
ptr< ::lestes::backend_v2::intercode::pi_piconjugated_chain_start_find (ptr< ::lestes::backend_v2::intercode::pi_pi > pi)
 Gets first pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.
virtual ptr< reflection_listreflection_get () const
 for purposes of dumping
virtual ptr< field_list_listfield_values_get () const
 for purposes of dumping

Static Public Member Functions

static ptr< order_governorcreate (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data, ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered, ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered, ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered)
 First generated factory method for class order_governor.
static ptr< order_governorcreate (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data)
 Second generated factory method for class order_governor.

Protected Member Functions

 order_governor (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data, ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered, ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered, ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered)
 Generated constructor for class order_governor.
virtual void gc_mark ()
 Marking routine for class order_governor.

Private Attributes

srp< ::lestes::std::list<
srp< ::lestes::backend_v2::intercode::pi_pi > > > 
pis_ordered
 List of already linearized pseudoinstructions.
srp< ::lestes::std::list<
srp< ::lestes::backend_v2::intercode::pi_pi > > > 
pis_unordered
 List of not yet linerized pseudoinstructions.
srp< ::lestes::std::map< srp<
::lestes::backend_v2::intercode::pi_pi >,
bool > > 
is_ordered
 Map that tells whether a pseudoinstruction is already in ordered list.

Static Private Attributes

static ptr< reflection_listreflection = reflection

Detailed Description

Linearizes pseudopinstructions within function's body.

Result of linearization is order where every pseudoinstruction is positioned between its psp and nsp sequencepoints and after origins of its operands. It means that pseudoinstruction is executed after all its origins are ready.

Definition at line 64 of file order_governor.g.hh.


Member Typedef Documentation

typedef ulint lestes::backend_v2::workers::order_governor::level_t

Definition at line 66 of file order_governor.g.hh.


Constructor & Destructor Documentation

lestes::backend_v2::workers::order_governor::order_governor ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data,
ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  a__order_governor__pis_ordered,
ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  a__order_governor__pis_unordered,
ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > >  a__order_governor__is_ordered 
) [protected]

Generated constructor for class order_governor.

Generated constructor for class order_governor.

Author:
lsg

Definition at line 107 of file order_governor.g.cc.

Referenced by create().

00111         : worker_base(a__worker_base__data), pis_ordered(checked(a__order_governor__pis_ordered)), pis_unordered(a__order_governor__pis_unordered), is_ordered(checked(a__order_governor__is_ordered))
00112 {}


Member Function Documentation

ptr<::lestes::std::list< srp<::lestes::backend_v2::intercode::pi_pi > > > lestes::backend_v2::workers::order_governor::pis_ordered_get (  )  const

The method pis_ordered_get returns the value of the field order_governor::pis_ordered.

Returns:
The value of order_governor::pis_ordered.
Author:
lsg

Definition at line 29 of file order_governor.g.cc.

References pis_ordered.

Referenced by process(), and torder_ordered().

00030 {
00031         return pis_ordered;
00032 }

void lestes::backend_v2::workers::order_governor::pis_ordered_set ( const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > &  x  ) 

The method pis_ordered_set sets the field order_governor::pis_ordered to the given value.

Parameters:
[in] x The new value to set order_governor::pis_ordered to.
Author:
lsg

Definition at line 38 of file order_governor.g.cc.

References pis_ordered.

Referenced by torder_ordered().

00039 {
00040         order_governor::pis_ordered = x;
00041 }

ptr<::lestes::std::list< srp<::lestes::backend_v2::intercode::pi_pi > > > lestes::backend_v2::workers::order_governor::pis_unordered_get (  )  const

The method pis_unordered_get returns the value of the field order_governor::pis_unordered.

Returns:
The value of order_governor::pis_unordered.
Author:
lsg

Definition at line 47 of file order_governor.g.cc.

References pis_unordered.

Referenced by merge_ordered_with_unordered_level_X(), and process().

00048 {
00049         return pis_unordered;
00050 }

void lestes::backend_v2::workers::order_governor::pis_unordered_set ( const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > &  x  ) 

The method pis_unordered_set sets the field order_governor::pis_unordered to the given value.

Parameters:
[in] x The new value to set order_governor::pis_unordered to.
Author:
lsg

Definition at line 56 of file order_governor.g.cc.

References pis_unordered.

00057 {
00058         order_governor::pis_unordered = x;
00059 }

ptr<::lestes::std::map< srp<::lestes::backend_v2::intercode::pi_pi >, bool > > lestes::backend_v2::workers::order_governor::is_ordered_get (  )  const

The method is_ordered_get returns the value of the field order_governor::is_ordered.

Returns:
The value of order_governor::is_ordered.
Author:
lsg

Definition at line 65 of file order_governor.g.cc.

References is_ordered.

Referenced by torder_ordered().

00066 {
00067         return is_ordered;
00068 }

void lestes::backend_v2::workers::order_governor::is_ordered_set ( const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > &  x  ) 

The method is_ordered_set sets the field order_governor::is_ordered to the given value.

Parameters:
[in] x The new value to set order_governor::is_ordered to.
Author:
lsg

Definition at line 74 of file order_governor.g.cc.

References is_ordered.

00075 {
00076         order_governor::is_ordered = x;
00077 }

void lestes::backend_v2::workers::order_governor::process (  )  [virtual]

Manages linearization.

Implements lestes::backend_v2::workers::worker_base.

Definition at line 30 of file order_governor.cc.

References lestes::backend_v2::workers::worker_base::data_get(), lestes::msg::eolog, identify_level_0(), linearize_ordered_sps(), merge_ordered_with_unordered_level_X(), pis_ordered_get(), pis_unordered, pis_unordered_get(), renumber_levels(), shift_unordered_nsp_psp(), and torder_ordered().

00031 {
00032         og_log << "Process begin\n" << eolog;
00033         
00034         pis_unordered = data_get()->pi_body_get();
00035         
00036         //Find pis with level set to 0.    
00037     identify_level_0();
00038         
00039         //Repeat loop while there are any unordered pis. 
00040     while( !pis_unordered_get()->empty() ) {
00041                 og_log << "Main loop begin.\n" << eolog;
00042                 
00043                 //Find unordered pis with level=1 and move them to the ordered set.
00044                 merge_ordered_with_unordered_level_X(1);
00045                 //Order merged level 0&1 set.
00046                 torder_ordered();
00047                 //Linearize ordered sps.
00048                 linearize_ordered_sps();
00049                 //Move psp and nsp pointers.
00050                 shift_unordered_nsp_psp();
00051                 //Recalculate levels for unordered pis.
00052                 renumber_levels(pis_unordered_get());
00053                 //Recalculate levels for ordered pis.
00054                 renumber_levels(pis_ordered_get());
00055                 
00056                 og_log << "Main loop end.\n" << eolog;
00057     }
00058         
00059         og_log << "Process end.\n" << eolog;
00060 }

ptr< func_data > lestes::backend_v2::workers::order_governor::get_result (  )  [virtual]

Returns func_data with linearized pseudoinstructions.

Implements lestes::backend_v2::workers::worker_base.

Definition at line 381 of file order_governor.cc.

References lestes::backend_v2::workers::worker_base::data_get(), lassert, and pis_ordered.

00382 {
00383         lassert(pis_ordered);
00384                 
00385         ptr<visitor_pi_pi2id> pi_id_getter = visitor_pi_pi2id::create();
00386         
00387         /*
00388                 Set psp to the previous pi_sp (now it can also be pi_pi).
00389         */
00390         ptr<pi_sp> tmp_sp = NULL;
00391         for(pi_list_type::iterator it_pi_list = pis_ordered->begin(); it_pi_list!=pis_ordered->end(); ++it_pi_list) {
00392                 ptr<pi_pi> pi = *it_pi_list;
00393 
00394                 visitor_pi_pi2id::kind_type pi_id = (visitor_pi_pi2id::kind_type)pi->accept_visitor_pi_pi2ulint_gen_base(pi_id_getter);
00395                 
00396                 //Set psp to previous sequencepoint (now psp can be pi_sp or pi_pi )
00397                 pi->psp_set(tmp_sp);
00398                 
00399                 //Add pi to an output list
00400                 if ( pi_id==visitor_pi_pi2id::PI_SP ) {
00401                         tmp_sp = pi.dncast<pi_sp>();
00402                 }
00403                 
00404         }
00405         
00406         /*
00407                 Set nsp to the following pi_sp (now it can also be pi_pi). 
00408         */
00409         tmp_sp = NULL;
00410         for(pi_list_type::reverse_iterator it_pi_list = pis_ordered->rbegin(); it_pi_list!=pis_ordered->rend(); ++it_pi_list) {
00411                 ptr<pi_pi> pi = *it_pi_list;
00412                 
00413                 visitor_pi_pi2id::kind_type pi_id = (visitor_pi_pi2id::kind_type)pi->accept_visitor_pi_pi2ulint_gen_base(pi_id_getter);
00414                 
00415                 pi->nsp_set(tmp_sp);
00416                 
00417                 if ( pi_id==visitor_pi_pi2id::PI_SP ) {
00418                         tmp_sp = pi.dncast<pi_sp>();
00419                 }
00420         }       
00421         
00422         data_get()->pi_body_set(pis_ordered);
00423         
00424         return data_get();
00425 }

void lestes::backend_v2::workers::order_governor::merge_ordered_with_unordered_level_X ( level_t  level_to_merge  ) 

Merges unordered pseudoinstructions of given level with ordered pseudoinstructions.

Parameters:
level_to_merge The level to be merged.

Definition at line 87 of file order_governor.cc.

References lestes::msg::eolog, pis_ordered, pis_unordered, and pis_unordered_get().

Referenced by identify_level_0(), and process().

00088 {
00089         //Go through the unordered set.
00090     for(pi_list_type::iterator it = pis_unordered_get()->begin(); it != pis_unordered_get()->end();) {
00091                 if ( (*it)->level_get() == level_to_merge ) {
00092                         og_log << "Merging L0 with L" << level_to_merge << ": " << (*it)->reflection_get()->back()->name_get() << "(" << (*it)->uid_get() << ")[level=" << (*it)->level_get() << "] added\n" << eolog;;
00093                         
00094                         //Current pi has the right level. Move it to the ordered set.
00095                 pis_ordered->push_back(*it);
00096                         //Delete it from unordered set.
00097                 it = pis_unordered->erase(it);
00098                 } else {
00099                         ++it;
00100                 }
00101     }
00102         
00103 }

void lestes::backend_v2::workers::order_governor::torder_ordered (  ) 

Linearizes pis_ordered list.

Performs topological ordering in directed acyclic graph. Vertices are pseudoinstructions from pis_ordered list. Incoming edges for pseudoinstruction pi are psp->pi and origin->pi for each pi's operand. Outcoming edge is pi->nsp.

Definition at line 140 of file order_governor.cc.

References lestes::msg::eolog, is_ordered, is_ordered_get(), lassert2, nsp_for_any(), pi_operands_origins_ordered(), pis_ordered_get(), and pis_ordered_set().

Referenced by process().

00141 {
00142 
00143         og_log << "Tordering begin\n" << eolog;
00144         
00145         //The getter can obtain operands from any generic pi.
00146         ptr<visitor_pi_pi2pi_operands> operands_getter = visitor_pi_pi2pi_operands::create();
00147         
00148         //identificator can identify kind of any generic pi
00149         ptr<visitor_pi_pi2id> identificator = visitor_pi_pi2id::create();
00150         
00151         //List of ordered pis. No pi is ordered at the beginning.
00152     ptr<pi_list_type> tordered_list = pi_list_type::create();
00153         //List of unordered pis. Every pi is unordered at the beginning.
00154     ptr<pi_list_type> tunordered_list = pis_ordered_get();
00155     
00156         //Set is_ordered=false for all unordered pis.
00157     pi_list_type::iterator it;
00158     for(it=tunordered_list->begin(); it != tunordered_list->end(); it++) { 
00159                 (*is_ordered)[*it] = false;
00160     }
00161 
00162 #ifdef BACKEND_V2_DEBUG
00163         //infinite loop detection
00164         ulint dbg = 0;    
00165 #endif
00166 
00167         //Repeat loop while there are any unordered pis. 
00168     while( !tunordered_list->empty()) {
00169         
00170 #ifdef BACKEND_V2_DEBUG
00171                 lassert2(dbg<=tunordered_list->size(),"An inifinite loop detected.");
00172                 dbg++;
00173 #endif          
00174 
00175                 //Get first unorderd pi.
00176                 ptr<pi_pi> pi = tunordered_list->front();
00177                 
00178                 //Remove it from unordered set.
00179                 tunordered_list->pop_front();
00180                 
00181                 og_log << "Tordering: trying order " << pi->reflection_get()->back()->name_get() << "(" << pi->uid_get() << ")\n" << eolog;
00182         
00183                 if ( pi->psp_get() && (*is_ordered_get())[pi->psp_get()] == false )  {
00184                         //Psp is unordered. So this pi is also unordered.
00185                 tunordered_list->push_back(pi);
00186                         
00187                         og_log << "\tTordering: current pi can't be ordered (psp is not ordered yet)\n" << eolog;
00188                         
00189                         continue;
00190                 }
00191                 
00192                 //Get it's operands.
00193                 ptr<pi_operands> operands = pi->accept_visitor_pi_pi2pi_operands_gen_base(operands_getter);
00194                 /* Test if every input operand's origin is ordered. 
00195                  ( Do not test output operands - its origin is set to the current pi. )
00196                 */
00197                 
00198             if ( !pi_operands_origins_ordered(operands->operands_input_get()) ) {
00199                         //One of operands hasn't got its origin ordered
00200                         tunordered_list->push_back(pi);
00201                         
00202                         og_log << "\tTordering: current pi can't be ordered (origins of operands are not ordered yet)\n" << eolog;
00203                         
00204                         continue;
00205                 }
00206                 
00207             if ( nsp_for_any(pi, tunordered_list) ) {
00208                         //It is pi_sp and it is nsp for one of unordered pis.
00209                         tunordered_list->push_back(pi);
00210                         
00211                         og_log << "\tTordering: current pi can't be ordered (sp is nsp for unorderd pi)\n" << eolog;
00212                         
00213                         continue;
00214                 }
00215                 
00216                 (*is_ordered_get())[pi] = true;
00217             tordered_list->push_back(pi);
00218                 
00219                 og_log << "\tTordering: " << pi->reflection_get()->back()->name_get() << "(" << pi->uid_get() << ") is set as ordered\n" << eolog;
00220 
00221 #ifdef BACKEND_V2_DEBUG
00222                 dbg = 0;
00223 #endif
00224 
00225     }
00226         
00227         //We have new bigger ordered set.
00228     pis_ordered_set(tordered_list);
00229         
00230         og_log << "Tordering end\n" << eolog;
00231 }

bool lestes::backend_v2::workers::order_governor::pi_operands_origins_ordered ( ptr< vector< srp< ::lestes::backend_v2::intercode::pi_operand > > >  operand_list  ) 

Tells whether origin of each operand in list is ordered.

Referenced by torder_ordered().

void lestes::backend_v2::workers::order_governor::renumber_levels ( ptr< list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  pi_list  ) 

Decrease by 1 level of pseudoinstructions in a list.

Referenced by process().

bool lestes::backend_v2::workers::order_governor::nsp_for_any ( ptr< ::lestes::backend_v2::intercode::pi_pi sp,
ptr< list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  list 
)

Tells whether a sequencepoint is psp for any of pseudoinstructions in a list.

Referenced by torder_ordered().

void lestes::backend_v2::workers::order_governor::identify_level_0 (  ) 

Moves pseudoinstructions of level 0 from pis_unordered to pis_ordered list.

Definition at line 66 of file order_governor.cc.

References is_ordered, merge_ordered_with_unordered_level_X(), pis_ordered, and pis_unordered.

Referenced by process().

00067 {
00068         //the ordered set is empty. Copy pis with level=0 to it.
00069     merge_ordered_with_unordered_level_X(0);
00070         
00071         //Set is_ordered=true for all pis with level=0.
00072     pi_list_type::iterator it;
00073     for(it=pis_ordered->begin(); it != pis_ordered->end(); it++) { 
00074                 (*is_ordered)[*it] = true;
00075     }
00076         
00077         //Set is_ordered=false for all pis with level>0.
00078     for(it=pis_unordered->begin(); it != pis_unordered->end(); it++) { 
00079                 (*is_ordered)[*it] = false;
00080     }
00081 }

void lestes::backend_v2::workers::order_governor::linearize_ordered_sps (  ) 

Linearizes sequencepoints in pis_ordered list.

Definition at line 108 of file order_governor.cc.

References pis_ordered.

Referenced by process().

00108                                            {
00109         ptr<visitor_pi_pi2id> identificator = visitor_pi_pi2id::create();
00110         /*
00111                 Go through ordered list and for each pi_sp set psp to the previous one
00112                 and previous one's nsp to this sp.
00113         */
00114         ptr<pi_pi> previous = NULL;
00115         ptr<pi_pi> current = NULL;
00116         pi_list_type::iterator it;
00117     for(it=pis_ordered->begin(); it != pis_ordered->end(); it++) { 
00118         
00119                 //if ( (*it)->accept_visitor_pi_pi2ulint_gen_base(identificator) == visitor_pi_pi2id::PI_SP ) {
00120                         //current pi is type of pi_sp
00121                         current = (*it);
00122                         
00123                         if ( previous ) {
00124                                 previous->nsp_set(current);
00125                         }
00126                         current->psp_set(previous);
00127                         previous = current;
00128                 //}
00129     }
00130         current->nsp_set(NULL);
00131 }

void lestes::backend_v2::workers::order_governor::shift_unordered_nsp_psp (  ) 

Shifts psp and nsp of pis_unordered pseudoinstructions.

Definition at line 323 of file order_governor.cc.

References conjugated_chain_end_find(), conjugated_chain_start_find(), lestes::msg::eolog, get_pi_level(), lassert, and pis_unordered.

Referenced by process().

00324 {
00325         //Move psp and nsp of unordered pis.
00326     pi_list_type::iterator it;
00327     for(it = pis_unordered->begin(); it!=pis_unordered->end(); it++) {
00328                 ptr<pi_pi> pi = (*it);
00329                 
00330                 og_log << "shift_unordered_nsp_psp: pi(" << pi->uid_get() << ").level= " << get_pi_level(pi) << "\n" <<  msg::eolog;
00331                 
00332                 lassert(get_pi_level(pi)>1);
00333                 
00334                 if ( get_pi_level(pi->psp_get())==0 ) {
00335                         ptr<pi_pi> pi_hlp = conjugated_chain_end_find(pi);
00336                         
00337                         og_log << "shift_psp: chain_end(" << pi_hlp->uid_get() << ").nsp.level=" << get_pi_level(pi_hlp->nsp_get()) << "\n" <<  msg::eolog;
00338                         
00339                         lassert(get_pi_level(pi_hlp)==get_pi_level(pi));
00340                         
00341                         if (get_pi_level(pi_hlp->nsp_get())>0){
00342                                 pi->psp_set(pi_hlp->nsp_get()->psp_get());
00343                         }
00344                         
00345                 } else if ( get_pi_level(pi->nsp_get())==0 ) {
00346                         ptr<pi_pi> pi_hlp = conjugated_chain_start_find(pi);
00347 
00348                         og_log << "shift_nsp: chain_begin(" << pi_hlp->uid_get() << ").psp.level=" << get_pi_level(pi_hlp->psp_get()) << "\n" << msg::eolog;
00349 
00350                         lassert(get_pi_level(pi_hlp)==get_pi_level(pi));
00351 
00352                         if (get_pi_level(pi_hlp->psp_get())>0) {
00353                                 pi->nsp_set(pi_hlp->psp_get()->nsp_get());
00354                         }
00355                 }
00356     }
00357 }

lint lestes::backend_v2::workers::order_governor::get_pi_level ( ptr< ::lestes::backend_v2::intercode::pi_pi pi  ) 

Returns level of a pi_pi pseudoinstruction.

Referenced by shift_unordered_nsp_psp().

ptr< ::lestes::backend_v2::intercode::pi_pi > lestes::backend_v2::workers::order_governor::conjugated_chain_end_find ( ptr< ::lestes::backend_v2::intercode::pi_pi pi  ) 

Gets last pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.

Referenced by shift_unordered_nsp_psp().

ptr< ::lestes::backend_v2::intercode::pi_pi > lestes::backend_v2::workers::order_governor::conjugated_chain_start_find ( ptr< ::lestes::backend_v2::intercode::pi_pi pi  ) 

Gets first pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.

Referenced by shift_unordered_nsp_psp().

ptr< order_governor > lestes::backend_v2::workers::order_governor::create ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data,
ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  a__order_governor__pis_ordered,
ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  a__order_governor__pis_unordered,
ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > >  a__order_governor__is_ordered 
) [static]

First generated factory method for class order_governor.

This factory method for class order_governor takes values of all fields as arguments.

Author:
lsg

Definition at line 83 of file order_governor.g.cc.

References order_governor().

Referenced by create().

00087 {
00088         return ptr< order_governor > ( new order_governor(a__worker_base__data,
00089                 a__order_governor__pis_ordered,
00090                 a__order_governor__pis_unordered,
00091                 a__order_governor__is_ordered) );
00092 }

ptr< order_governor > lestes::backend_v2::workers::order_governor::create ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data  )  [static]

Second generated factory method for class order_governor.

This factory method for class order_governor uses initializers.

Author:
lsg

Definition at line 98 of file order_governor.g.cc.

References create(), and order_governor().

00099 {
00100         return ptr< order_governor > ( new order_governor(a__worker_base__data, ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > ::create(), NULL, ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > ::create()) );
00101 }

ptr< object::reflection_list > lestes::backend_v2::workers::order_governor::reflection_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 114 of file order_governor.g.cc.

References lestes::std::list< T >::create(), reflection, and lestes::backend_v2::workers::worker_base::reflection_get().

00115 {
00116         if (!reflection) {
00117                 typedef class_reflection::field_metadata md;
00118                 typedef class_reflection::field_metadata_list mdlist;
00119                 ptr<mdlist> mdl = mdlist::create();
00120                 mdl->push_back( md::create( "pis_ordered", "list&lt; srp&lt; ::lestes::backend_v2::intercode::pi_pi &gt; &gt;" ) );
00121                 mdl->push_back( md::create( "pis_unordered", "list&lt; srp&lt; ::lestes::backend_v2::intercode::pi_pi &gt; &gt;" ) );
00122                 mdl->push_back( md::create( "is_ordered", "map&lt; srp&lt; ::lestes::backend_v2::intercode::pi_pi &gt;, bool &gt;" ) );
00123                 reflection = reflection_list::create( worker_base::reflection_get() );
00124                 reflection->push_back( class_reflection::create( "order_governor", mdl ) );
00125         }
00126         return reflection;
00127 }

ptr< object::field_list_list > lestes::backend_v2::workers::order_governor::field_values_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 129 of file order_governor.g.cc.

References lestes::std::list< T >::create(), and lestes::backend_v2::workers::worker_base::field_values_get().

00130 {
00131         ptr < field_list_list > result = worker_base::field_values_get();
00132         result->push_back( value_list::create() );
00133         result->back()->push_back( this->pis_ordered );
00134         result->push_back( value_list::create() );
00135         result->back()->push_back( this->pis_unordered );
00136         result->push_back( value_list::create() );
00137         result->back()->push_back( this->is_ordered );
00138         return result;
00139 }

void lestes::backend_v2::workers::order_governor::gc_mark ( void   )  [protected, virtual]

Marking routine for class order_governor.

Marking routine is used for garbage collection.

Author:
lsg

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 146 of file order_governor.g.cc.

References lestes::backend_v2::workers::worker_base::gc_mark().

00147 {
00148         worker_base::gc_mark();
00149 }


Member Data Documentation

srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > lestes::backend_v2::workers::order_governor::pis_ordered [private]

List of already linearized pseudoinstructions.

Definition at line 155 of file order_governor.g.hh.

Referenced by get_result(), identify_level_0(), linearize_ordered_sps(), merge_ordered_with_unordered_level_X(), pis_ordered_get(), and pis_ordered_set().

srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > lestes::backend_v2::workers::order_governor::pis_unordered [private]

List of not yet linerized pseudoinstructions.

Definition at line 157 of file order_governor.g.hh.

Referenced by identify_level_0(), merge_ordered_with_unordered_level_X(), pis_unordered_get(), pis_unordered_set(), process(), and shift_unordered_nsp_psp().

srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > lestes::backend_v2::workers::order_governor::is_ordered [private]

Map that tells whether a pseudoinstruction is already in ordered list.

Definition at line 159 of file order_governor.g.hh.

Referenced by identify_level_0(), is_ordered_get(), is_ordered_set(), and torder_ordered().

ptr< object::reflection_list > lestes::backend_v2::workers::order_governor::reflection = reflection [static, private]

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 160 of file order_governor.g.hh.

Referenced by reflection_get().


The documentation for this class was generated from the following files:
Generated on Mon Feb 12 18:24:11 2007 for lestes by doxygen 1.5.1-20070107