src/ell/StateCollector.hh
Go to the documentation of this file.00001 #ifndef STATECOLLECTOR_HH_ 00002 #define STATECOLLECTOR_HH_ 00003 00004 #include "ell/State.hh" 00005 00006 //############################################################################## 00007 //############################################################################## 00008 00009 namespace ell 00010 { 00018 class StateCollector 00019 { 00020 public: 00021 00022 virtual 00023 ~StateCollector() {} 00024 00027 virtual void add(const State& s) = 0; 00028 00031 virtual size_t size() const = 0; 00032 00035 virtual const State* const getLastAdded() const = 0; 00036 00037 }; 00038 00039 } // namespace ell 00040 00041 00042 //############################################################################## 00043 //############################################################################## 00044 00045 namespace ell 00046 { 00052 class SC_Counting : public StateCollector 00053 { 00054 protected: 00055 00057 State* lastAdded; 00059 size_t stateCount; 00060 00061 public: 00062 00063 SC_Counting(); 00064 00065 virtual 00066 ~SC_Counting(); 00067 00070 virtual void add(const State& s); 00071 00074 virtual size_t size() const; 00075 00078 virtual const State* const getLastAdded() const; 00079 00080 }; 00081 00082 } // namespace ell 00083 00084 00085 //############################################################################## 00086 //############################################################################## 00087 00088 #include <list> 00089 00090 namespace ell 00091 { 00092 00098 class SC_Listing : public StateCollector 00099 { 00100 public: 00101 00102 typedef std::list<State*> List; 00103 00104 protected: 00105 00107 List stateList; 00108 00109 public: 00110 00111 SC_Listing(); 00112 ~SC_Listing(); 00113 00116 virtual void add(const State& s); 00117 00120 virtual size_t size() const; 00121 00124 virtual const State* const getLastAdded() const; 00125 00127 00130 virtual const List& getList() const; 00131 00132 }; 00133 00134 } // namespace ell 00135 00136 00137 //############################################################################## 00138 //############################################################################## 00139 00140 #include <vector> 00141 00142 namespace ell 00143 { 00144 00151 class SC_ListingK : public StateCollector 00152 { 00153 public: 00154 00155 typedef std::vector<State*> List; 00156 00157 protected: 00158 00160 List stateList; 00162 size_t curEnd; 00163 00165 size_t addedTotal; 00166 00167 public: 00168 00171 SC_ListingK(const size_t length); 00172 ~SC_ListingK(); 00173 00176 virtual void add(const State& s); 00177 00180 virtual size_t size() const; 00181 00184 virtual const State* const getLastAdded() const; 00185 00187 00191 class iterator { 00192 protected: 00193 const size_t start; 00194 size_t i; 00195 const SC_ListingK* const parent; 00196 public: 00197 00198 iterator( const size_t start_, const SC_ListingK* const parent_) 00199 : start(start_), i(start_), parent(parent_) 00200 { 00201 } 00202 00203 const State* const operator*() const { 00204 return parent->stateList[i]; 00205 } 00206 00207 bool operator++() { 00208 i = (i+1) % parent->stateList.size(); 00209 return i != start; 00210 } 00211 00212 bool operator++( int ) { 00213 i = (i+1) % parent->stateList.size(); 00214 return i != start; 00215 } 00216 }; 00217 00218 virtual iterator getList() const; 00219 00220 }; 00221 00222 } // namespace ell 00223 00224 00225 //############################################################################## 00226 //############################################################################## 00227 00228 #include <list> 00229 00230 namespace ell 00231 { 00232 00240 class SC_ListingCompr : public SC_Counting 00241 { 00242 public: 00243 00244 typedef std::list<CSequence> List; 00245 00246 protected: 00247 00249 List stateList; 00250 00251 public: 00252 00253 SC_ListingCompr(); 00254 ~SC_ListingCompr(); 00255 00259 virtual void add(const State& s); 00260 00262 00266 virtual const List& getList() const; 00267 00268 }; 00269 00270 } // namespace ell 00271 00272 //############################################################################## 00273 //############################################################################## 00274 00275 namespace ell 00276 { 00277 00283 class SC_Maximum : public SC_Counting 00284 { 00285 protected: 00286 State* maxEState; 00287 00288 public: 00289 SC_Maximum(); 00290 virtual ~SC_Maximum(); 00291 00295 virtual 00296 void 00297 add(const State& s); 00298 00301 const State* const 00302 getMaximumState() const; 00303 }; 00304 00305 } // namespace ell 00306 00307 //############################################################################## 00308 //############################################################################## 00309 00310 #include <iostream> 00311 #include <string> 00312 00313 namespace ell 00314 { 00315 00321 class SC_Outstream : public SC_Counting 00322 { 00323 protected: 00325 std::ostream& out; 00326 00328 const std::string strAdded; 00329 00330 public: 00331 00335 SC_Outstream( std::ostream& out 00336 , const std::string& toAppend); 00337 00338 virtual ~SC_Outstream(); 00339 00342 virtual void add(const State& s); 00343 00344 }; 00345 00346 } // namespace ell 00347 00348 //############################################################################## 00349 //############################################################################## 00350 00351 #include <ell/LandscapeTopology.hh> 00352 00353 namespace ell 00354 { 00355 00369 class SC_PartitionFunction : public SC_Counting 00370 { 00371 public: 00373 SC_PartitionFunction(); 00375 virtual ~SC_PartitionFunction(); 00376 00379 virtual void add(const State& s); 00380 00381 protected: 00382 00384 double Z; 00385 00386 public: 00387 00392 double getZ( void ) const; 00393 00398 double getEnergy( void ) const; 00399 }; 00400 00401 00422 class SC_PartitionFunction_Shifted : public SC_Counting 00423 { 00424 public: 00425 00429 SC_PartitionFunction_Shifted( const LandscapeTopology& lt ); 00430 00438 SC_PartitionFunction_Shifted( const double MinE ); 00439 00441 virtual ~SC_PartitionFunction_Shifted(); 00442 00445 virtual void add(const State& s); 00446 00447 protected: 00448 00451 double Z_shifted; 00452 00454 const double MIN_E; 00455 00456 public: 00457 00462 double getZ( void ) const; 00463 00468 double getEnergy( void ) const; 00469 }; 00470 00471 } // namespace ell 00472 00473 //############################################################################## 00474 //############################################################################## 00475 00476 #endif /*STATECOLLECTOR_HH_*/