00001
00011 #ifndef PY_EVENT_BASE_H
00012 #define PY_EVENT_BASE_H
00013
00014 #include "event_base.h"
00015 #include "event_manager.h"
00016
00017 #include "calc_model.h"
00018 #include "reservoir.h"
00019
00020 #include "export_python_wrapper.h"
00021
00022 #include "py_reservoir.h"
00023 #include "py_calc_model.h"
00024
00025
00026 #include "well_results_storage.h"
00027 #include "fip_results_storage.h"
00028
00029 namespace blue_sky {
00030 namespace python {
00031
00032 STRATEGY_CLASS_WRAPPER (event_base, py_event_base)
00033 {
00034 public:
00035 typedef rs_mesh_iface <strategy_t> mesh_t;
00036 typedef reservoir <strategy_t> reservoir_t;
00037 typedef py_calc_model <strategy_t> py_calc_model_t;
00038 typedef smart_ptr <mesh_t, true> sp_mesh_iface_t;
00039 typedef smart_ptr <reservoir_t, true> sp_reservoir_t;
00040 typedef event_base <strategy_t> base_t;
00041
00042 public:
00043 MAKE_ME_HAPPY (py_event_base, py_event_base_base <strategy_t>, "py_event_base");
00044
00045 };
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 template <typename strategy_t> class py_el_pair;
00091
00092 template <typename strategy_t>
00093 class py_event_base_iterator : public std::iterator<
00094 std::bidirectional_iterator_tag,
00095 py_event_base<strategy_t>, ptrdiff_t,
00096 py_event_base<strategy_t>, py_event_base<strategy_t> >
00097 {
00098
00099 public:
00100
00101 typedef event_manager <strategy_t> event_manager_t;
00102 typedef typename event_manager_t::event_map em_t;
00103 typedef typename em_t::iterator list_iterator_t;
00104 typedef typename list_iterator_t::value_type value_t;
00105 typedef typename value_t::second_type elist_t;
00106
00107 typedef py_el_pair <strategy_t> py_el_pair_t;
00108 typedef typename elist_t::value_type sp_event_base_t;
00109 typedef typename elist_t::iterator iterator_t;
00110 typedef typename elist_t::const_iterator const_iterator_t;
00111
00112 typedef py_event_base <strategy_t> py_event_base_t;
00113 typedef py_event_base_iterator <strategy_t> this_t;
00114
00115 typedef std::iterator<std::bidirectional_iterator_tag,
00116 py_event_base<strategy_t>, ptrdiff_t,
00117 py_event_base<strategy_t>, py_event_base<strategy_t> > base_t;
00118
00119 typedef typename base_t::reference reference;
00120 typedef typename base_t::pointer pointer;
00121
00122 py_event_base_iterator (const elist_t &events);
00123 py_event_base_iterator (const this_t &iter);
00124
00125 py_event_base_t *next ();
00126
00127 reference operator*() const;
00128
00129 this_t& operator++();
00130 this_t operator++(int);
00131
00132 this_t& operator--();
00133 this_t operator--(int);
00134
00135 bool operator ==(const this_t &ritr) const;
00136 bool operator !=(const this_t &ritr) const;
00137 const this_t &operator =(const this_t &ritr);
00138
00139 protected:
00140 elist_t events;
00141 const_iterator_t iter;
00142 };
00143
00144 template <typename strategy_t>
00145 class py_el_pair
00146 {
00147 public:
00148 typedef py_el_pair <strategy_t> this_t;
00149
00150 typedef event_manager <strategy_t> event_manager_t;
00151 typedef typename event_manager_t::event_map em_t;
00152 typedef typename em_t::const_iterator const_iterator_t;
00153 typedef typename em_t::iterator iterator_t;
00154 typedef typename iterator_t::value_type value_t;
00155 typedef typename value_t::first_type first_t;
00156 typedef typename value_t::second_type second_t;
00157
00158 typedef py_event_base_iterator <strategy_t> py_event_base_iterator_t;
00159
00160 py_el_pair ();
00161 py_el_pair (const const_iterator_t &iter);
00162 py_el_pair (const this_t &iter);
00163
00164 py_event_base_iterator_t list_begin ();
00165
00166 protected:
00167 first_t first;
00168 second_t second;
00169
00170 };
00171
00172 template <typename strategy_t>
00173 class event_list_iterator : public std::iterator<
00174 std::bidirectional_iterator_tag,
00175 py_el_pair<strategy_t>, ptrdiff_t,
00176 py_el_pair<strategy_t>, py_el_pair<strategy_t> >
00177 {
00178
00179 public:
00180 typedef event_list_iterator <strategy_t> this_t;
00181
00182 typedef event_manager <strategy_t> event_manager_t;
00183 typedef smart_ptr <event_manager_t> sp_event_manager_t;
00184 typedef typename event_manager_t::event_map em_t;
00185 typedef typename em_t::const_iterator const_iterator_t;
00186 typedef typename em_t::iterator iterator_t;
00187 typedef typename em_t::key_type first_t;
00188 typedef typename em_t::value_type second_t;
00189 typedef py_el_pair <strategy_t> py_el_pair_t;
00190
00191 typedef std::iterator<std::bidirectional_iterator_tag,
00192 py_el_pair<strategy_t>, ptrdiff_t,
00193 py_el_pair<strategy_t>, py_el_pair<strategy_t> > base_t;
00194
00195 typedef typename base_t::reference reference;
00196 typedef typename base_t::pointer pointer;
00197
00198
00199 event_list_iterator (const sp_event_manager_t &);
00200 event_list_iterator (const this_t &iter);
00201
00202 reference operator*() const;
00203
00204 this_t& operator++();
00205 this_t operator++(int);
00206
00207 py_el_pair_t next ();
00208
00209 this_t& operator--();
00210 this_t operator--(int);
00211
00212 bool operator ==(const this_t &ritr) const;
00213 bool operator !=(const this_t &ritr) const;
00214 const this_t &operator =(const this_t &ritr);
00215
00216 protected:
00217 sp_event_manager_t evm;
00218 const_iterator_t iter;
00219
00220 };
00221
00225 void
00226 py_export_events ();
00227
00228 }
00229 }
00230
00231 #endif // PY_EVENT_BASE_H