Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

geometry/connectorSequence.hh
Go to the documentation of this file.
00001 /* Sets for Connectors.
00002  */
00003 
00004 #ifndef ConnectorSequence_hh
00005 #define ConnectorSequence_hh
00006 
00007 #include "connector.hh"
00008 #include "toolbox/sequence.hh"
00009 
00010 namespace concepts {
00011 
00012   // ************************************************** Sequence<const Key*> **
00013 
00014   template<>
00015   class Sequence<const Key*> : public BaseSequence<const Key*> {
00016   public:
00017     Sequence() : BaseSequence<const Key*>() {}
00018     template<class F>
00019     Sequence(const F& seq) : BaseSequence<const Key*>(seq) {}
00020     virtual ~Sequence() {}
00021 
00022     Sequence<uint> key() const;
00023   };
00024 
00025   // ******************************************* Sequence<const Connector0*> **
00026 
00027   template<>
00028   class Sequence<const Connector0*> : 
00029     public BaseSequence<const Connector0*> {
00030   public:
00031     Sequence() : BaseSequence<const Connector0*>() {}
00032     template<class F>
00033     Sequence(const F& seq) : BaseSequence<const Connector0*>(seq) {}
00034     virtual ~Sequence() {}
00035 
00036     Sequence<const Key*> key() const;
00037   };
00038 
00039   // ************************************************* Sequence<Connector0*> **
00040 
00041   template<>
00042   class Sequence<Connector0*> : public BaseSequence<Connector0*> {
00043   public:
00044     Sequence() : BaseSequence<Connector0*>() {}
00045     template<class F>
00046     Sequence(const F& seq) : BaseSequence<Connector0*>(seq) {}
00047     virtual ~Sequence() {}
00048 
00049     Sequence<const Key*> key() const;
00050   };
00051 
00052   // ******************************************* Sequence<const Connector1*> **
00053 
00054   template<>
00055   class Sequence<const Connector1*> : 
00056     public BaseSequence<const Connector1*> {
00057   public:
00058     Sequence() : BaseSequence<const Connector1*>() {}
00059     template<class F>
00060     Sequence(const F& seq) : BaseSequence<const Connector1*>(seq) {}
00061     virtual ~Sequence() {}
00062 
00063     Sequence<const Key*> key() const;
00064     Sequence<Connector0*> vertex(uint i) const;
00065     Sequence<const Connector1*> child(uint i) const;
00066   };
00067 
00068   // ************************************************* Sequence<Connector1*> **
00069 
00070   template<>
00071   class Sequence<Connector1*> : public BaseSequence<Connector1*> {
00072   public:
00073     Sequence() : BaseSequence<Connector1*>() {}
00074     template<class F>
00075     Sequence(const F& seq) : BaseSequence<Connector1*>(seq) {}
00076     virtual ~Sequence() {}
00077 
00078     Sequence<const Key*> key() const;
00079     Sequence<Connector0*> vertex(uint i) const;
00080     Sequence<const Connector1*> child(uint i) const;
00081   };
00082 
00083   // ******************************************* Sequence<const Connector2*> **
00084 
00085   template<>
00086   class Sequence<const Connector2*> : 
00087     public BaseSequence<const Connector2*> {
00088   public:
00089     Sequence() : BaseSequence<const Connector2*>() {}
00090     template<class F>
00091     Sequence(const F& seq) : BaseSequence<const Connector2*>(seq) {}
00092     virtual ~Sequence() {}
00093 
00094     Sequence<const Key*> key() const;
00095     Sequence<Connector0*> vertex(uint i) const;
00096     Sequence<Connector1*> edge(uint i) const;
00097     Sequence<const Connector2*> child(uint i) const;
00098   };
00099 
00100   // ************************************************* Sequence<Connector2*> **
00101 
00102   template<>
00103   class Sequence<Connector2*> : public BaseSequence<Connector2*> {
00104   public:
00105     Sequence() : BaseSequence<Connector2*>() {}
00106     template<class F>
00107     Sequence(const F& seq) : BaseSequence<Connector2*>(seq) {}
00108     virtual ~Sequence() {}
00109 
00110     Sequence<const Key*> key() const;
00111     Sequence<Connector0*> vertex(uint i) const;
00112     Sequence<Connector1*> edge(uint i) const;
00113     Sequence<const Connector2*> child(uint i) const;
00114   };
00115 
00116   // ********************************************************* allConnectors **
00117   
00123   template<class F, class G>
00124   Sequence<G*> allConnectors(const F& cntr, G* (F::*fun)(uint) const) {
00125     Sequence<G*> seq;
00126     G* cntri;  // connectors inside cntr
00127     uint i = 0;
00128     while ((cntri = (cntr.*fun)(i++)) != 0) seq.push_back(cntri);
00129     return seq;
00130   }
00131 
00132 } // namespace concepts
00133 
00134 #endif // ConnectorSequence_hh
00135 

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)