00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef lestes__backend_v2__workers__order_governor_g_hh__included
00010 #define lestes__backend_v2__workers__order_governor_g_hh__included
00011
00012 #include <lestes/backend_v2/common.hh>
00013 #include <lestes/std/map.hh>
00014 #include <lestes/std/vector.hh>
00015 #include <lestes/backend_v2/workers/worker_base.g.hh>
00016
00017 #include <lestes/std/objectize_macros.hh>
00018 package(lestes);
00019 package(backend_v2);
00020 package(intercode);
00021 class pi_pi;
00022 end_package(intercode);
00023 end_package(backend_v2);
00024 end_package(lestes);
00025
00026 package(lestes);
00027 package(backend_v2);
00028 package(intercode);
00029 class pi_sp;
00030 end_package(intercode);
00031 end_package(backend_v2);
00032 end_package(lestes);
00033
00034 package(lestes);
00035 package(backend_v2);
00036 package(intercode);
00037 class pi_operand;
00038 end_package(intercode);
00039 end_package(backend_v2);
00040 end_package(lestes);
00041
00042 package(lestes);
00043 package(backend_v2);
00044 package(structs);
00045 class func_data;
00046 end_package(structs);
00047 end_package(backend_v2);
00048 end_package(lestes);
00049
00050 package(lestes);
00051 package(backend_v2);
00052 package(workers);
00053
00054
00055 class order_governor;
00056
00057
00058
00059
00060
00061
00062
00063
00064 class order_governor : public worker_base {
00065 public:
00066 typedef ulint level_t;
00067
00068
00069 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_ordered_get() const;
00070
00071
00072 void pis_ordered_set(const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > & );
00073
00074
00075 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_unordered_get() const;
00076
00077
00078 void pis_unordered_set(const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > & );
00079
00080
00081 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > is_ordered_get() const;
00082
00083
00084 void is_ordered_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > & );
00085
00086 void process();
00087
00088 ptr< ::lestes::backend_v2::structs::func_data > get_result();
00089
00090
00091 void merge_ordered_with_unordered_level_X(level_t level_to_merge);
00092
00093
00094 void torder_ordered();
00095
00096
00097 bool pi_operands_origins_ordered(ptr<vector< srp< ::lestes::backend_v2::intercode::pi_operand > > > operand_list);
00098
00099
00100 void renumber_levels(ptr<list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pi_list);
00101
00102
00103 bool nsp_for_any(ptr< ::lestes::backend_v2::intercode::pi_pi > sp, ptr<list< srp< ::lestes::backend_v2::intercode::pi_pi > > > list);
00104
00105
00106 void identify_level_0();
00107
00108
00109 void linearize_ordered_sps();
00110
00111
00112 void shift_unordered_nsp_psp();
00113
00114
00115 lint get_pi_level(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00116
00117
00118 ptr< ::lestes::backend_v2::intercode::pi_pi > conjugated_chain_end_find(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00119
00120
00121 ptr< ::lestes::backend_v2::intercode::pi_pi > conjugated_chain_start_find(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00122
00123
00124
00125 static ptr< order_governor > create (
00126 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00127 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered,
00128 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered,
00129 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered);
00130
00131
00132 static ptr< order_governor > create (
00133 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00134
00135
00136
00137
00138 virtual ptr<reflection_list> reflection_get() const;
00139
00140 virtual ptr<field_list_list> field_values_get() const;
00141
00142 protected:
00143
00144 order_governor (
00145 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00146 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered,
00147 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered,
00148 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered);
00149
00150
00151 virtual void gc_mark();
00152
00153 private:
00154
00155 srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_ordered;
00156
00157 srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_unordered;
00158
00159 srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > is_ordered;
00160 static ptr<reflection_list> reflection;
00161
00162 };
00163
00164
00165 end_package(workers);
00166 end_package(backend_v2);
00167 end_package(lestes);
00168
00169 #endif // lestes__backend_v2__workers__order_governor_g_hh__included