Generated on Tue Dec 16 13:34:02 2008 for ell-3.0.0 by doxygen 1.5.1

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_*/