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

src/ell/StatePairCollector.hh

Go to the documentation of this file.
00001 #ifndef STATEPAIRCOLLECTOR_HH_
00002 #define STATEPAIRCOLLECTOR_HH_
00003 
00004 
00005 //##############################################################################
00006 //##############################################################################
00007 
00008 #include "ell/State.hh"
00009 
00010 #include <utility> // contains std::pair definition
00011 
00012 namespace ell 
00013 {
00022     class StatePairCollector
00023     {
00024     public: 
00025         
00027         typedef std::pair<const State*,const State*> StatePair;
00028     
00029         virtual
00030         ~StatePairCollector() {}
00031         
00032         
00035         virtual void add(const StatePair& s) = 0;
00036         
00040         virtual void add(   const State* const s1
00041                             , const State* const s2) = 0;
00042         
00045         virtual size_t size() const = 0;
00046         
00052         virtual const StatePair getLastAdded() const = 0;
00053         
00054     };
00055     
00056 } // namespace ell
00057 
00058 //##############################################################################
00059 //##############################################################################
00060 
00061 
00062 namespace ell
00063 {
00071     class SPC_Counting : public StatePairCollector
00072     {
00073         
00074     protected:
00075     
00077         State*  lastAdded_s1;
00079         State*  lastAdded_s2;
00081         size_t      statePairCount;
00082         
00083     public: 
00084     
00085         SPC_Counting();
00086         
00087         virtual
00088         ~SPC_Counting();
00089     
00093         virtual void add(   const StatePair& s );
00094         
00099         virtual void add(   const State* const s1
00100                             , const State* const s2 );
00101         
00104         virtual size_t size() const;
00105          
00111         virtual const StatePair getLastAdded() const;
00112         
00113     protected:
00114         
00116         void clearLastAdded();
00117         
00118     };
00119     
00120       // inline defintion 
00121     inline void SPC_Counting::clearLastAdded() {
00122         if (lastAdded_s1 != NULL)
00123             delete lastAdded_s1;
00124         if (lastAdded_s2 != NULL)
00125             delete lastAdded_s2;
00126     }
00127 
00128     
00129 } // namespace ell
00130 
00131 
00132 //##############################################################################
00133 //##############################################################################
00134 
00135 #include <list>
00136 
00137 namespace ell
00138 {
00146     class SPC_Listing : public StatePairCollector
00147     {
00148     public:
00149         typedef std::list<StatePair> List;
00150                 
00151     protected:
00152 
00154         List statePairList;
00155     
00156     public: 
00157     
00158         SPC_Listing();
00159         
00160         virtual
00161         ~SPC_Listing();
00162     
00165         virtual void add(const StatePair& s);
00166         
00170         virtual void add(   const State* const s1
00171                             , const State* const s2 );
00172         
00175         virtual size_t size() const;
00176          
00179         virtual const StatePair getLastAdded() const;
00180         
00182     
00185         virtual const List& getList() const;
00186         
00187     };
00188     
00189 } // namespace ell
00190 
00191 
00192 //##############################################################################
00193 //##############################################################################
00194 
00195 #include <ostream>
00196 #include <string>
00197 
00198 namespace ell {
00199 
00209     class SPC_Outstream : public SPC_Counting 
00210     {
00211     protected:
00213         std::ostream& out;
00214         
00216         const std::string strSep;
00217         
00219         const std::string strAppend;
00220 
00221     public:
00222         
00230         SPC_Outstream(  std::ostream& out
00231                         , const std::string& separator
00232                         , const std::string& toAppend );
00233 
00234         
00235         virtual
00236         ~SPC_Outstream();
00237     
00241         virtual void add(   const StatePair& s );
00242         
00247         virtual void add(   const State* const s1
00248                             , const State* const s2 );
00249         
00250     protected:
00251         
00253         void printToStream();
00254 
00255     };
00256     
00257     inline void SPC_Outstream::printToStream() {
00258         out <<lastAdded_s1->toString()
00259             <<strSep
00260             <<lastAdded_s2->toString()
00261             <<strAppend;
00262     }
00263 
00264 } // namespace ell
00265 
00266 //##############################################################################
00267 //##############################################################################
00268 
00269 
00270 namespace ell
00271 {
00281     class SPC_MinPair : public SPC_Counting
00282     {
00283         
00284     protected:
00285         
00289         const bool pairsAddedInAscOrder;
00290 
00292         State*  minPair_s1;
00294         State*  minPair_s2;
00297         const State*    minPair_max;
00298         
00299         using SPC_Counting::lastAdded_s1;
00300         using SPC_Counting::lastAdded_s2;
00301         
00302     public: 
00303         
00308         SPC_MinPair( const bool pairsAddedInAscOrder = false );
00309         
00310         virtual
00311         ~SPC_MinPair();
00312     
00316         virtual void add(   const StatePair& s );
00317         
00322         virtual void add(   const State* const s1
00323                             , const State* const s2 );
00324          
00330         virtual const StatePair getMinPair() const;
00331         
00332     protected:
00333         
00335         void clearMinPair();
00336         
00338           // minimal pair
00339         void checkMinPair();
00340         
00341     };
00342     
00343       // inline defintion 
00344     inline void SPC_MinPair::clearMinPair() {
00345         if (minPair_s1 != NULL)
00346             delete minPair_s1;
00347         if (minPair_s2 != NULL)
00348             delete minPair_s2;
00349     }
00350 
00351     
00352 } // namespace ell
00353 
00354 
00355 //##############################################################################
00356 //##############################################################################
00357 
00358 
00359 #endif /*STATEPAIRCOLLECTOR_HH_*/