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

geometry/connector.hh
Go to the documentation of this file.
00001 /* Connectors.
00002  * connectivity informations.
00003  */
00004 
00005 #ifndef Connector_hh
00006 #define Connector_hh
00007 
00008 #include "basics/typedefs.hh"
00009 #include "basics/outputOperator.hh"
00010 #include <iostream>
00011 
00012 namespace concepts {
00013 
00014   // ************************************************************* Attribute **
00015 
00021   class Attribute { 
00022     friend std::ostream& operator<<(std::ostream& os, const Attribute& a);
00023   public:
00028     inline Attribute(uint attrib = 0) : attrib_(attrib) {}
00029 
00031     int operator==(const Attribute& a) const { return attrib_ == a.attrib_; }
00032 
00034     inline operator uint() const { return attrib_; }
00035          
00037     inline uint attrib() const { return attrib_; }
00038   private:
00040     uint attrib_; 
00041   };
00042 
00043   // ******************************************************************* Key **
00044 
00049   class Key { 
00050     friend std::ostream& operator<<(std::ostream& os, const Key& k);
00051   public:
00053     inline Key(uint key = 0) : key_(key) {}
00054          
00056     inline int operator==(const Key& key) const { return key_ == key.key_; }
00057 
00059     inline operator uint() const { return key_; }
00060          
00062     inline uint key() const { return key_; }
00063 
00065     inline static uint noKey() { return (uint)-1; }
00066   private:
00067     uint key_; 
00068   };
00069 
00070   // ************************************************************* Connector **
00071 
00081   class Connector : public OutputOperator {
00082   public:
00084     Connector(const uint key, const Attribute attrib) :
00085       key_(key), attrib_(attrib) {}
00086 
00094     virtual Connector* child(uint i, bool mode = 0) = 0;
00095     virtual const Connector* child(uint i) const = 0;
00096 
00098     int operator==(const Connector& cntr) const { return key_ == cntr.key_; }
00099 
00101     const Key& key() const { return key_; }
00102 
00104     const Attribute& attrib() const { return attrib_; }
00105 
00115     int related(const Connector& conn) const;
00116   protected:
00117     virtual std::ostream& info(std::ostream& os) const;
00118 
00120     Key key_;
00121 
00123     Attribute attrib_;
00124   };
00125 
00129   bool operator<(const Connector& cntr_x, const Connector& cntr_y);
00130 
00131   // ************************************************************ Connector0 **
00132 
00138   class Connector0 : public Connector {
00139   public:
00144     inline Connector0(Attribute attrib) : Connector(cnt_++, attrib) {}
00145 
00146     virtual Connector0* child(uint i, bool mode = 0) = 0;
00147     virtual const Connector0* child(uint i) const = 0;
00148   protected:
00153     inline Connector0(const Attribute attrib, const Key& key)
00154       : Connector(key, attrib) {};
00155 
00159     static uint cnt_;
00160   };
00161 
00162   // ************************************************************ Connector1 **
00163 
00173   class Connector1 : public Connector {
00174   public:
00179     inline Connector1(Attribute attrib) : Connector(cnt_++, attrib) {}
00180 
00187     virtual Connector0* vertex(uint i) const = 0;
00188 
00189     virtual Connector1* child(uint i, bool mode = 0) = 0;
00190     virtual const Connector1* child(uint i) const = 0;
00191   protected:
00196     inline Connector1(const Attribute attrib, const Key& key)
00197       : Connector(key, attrib) {};
00198 
00202     static uint cnt_;
00203   };
00204 
00205   // ************************************************************ Connector2 **
00206 
00217   class Connector2 : public Connector {
00218   public:
00223     inline Connector2(Attribute attrib) : Connector(cnt_++, attrib) {}
00224 
00225     virtual Connector2* child(uint i, bool mode = 0) = 0;
00226     virtual const Connector2* child(uint i) const = 0;
00227 
00234     virtual Connector1* edge(uint i) const = 0;
00235 
00242     virtual Connector0* vertex(uint i) const = 0;
00243   protected: 
00248     inline Connector2(const Attribute attrib, const Key& key)
00249       : Connector(key, attrib) {};
00250 
00254     static  uint cnt_;
00255   };
00256 
00257   // ************************************************************ Connector3 **
00258 
00268   class Connector3 : public Connector {
00269   public:
00274     inline Connector3(Attribute attrib) : Connector(cnt_++, attrib) {}
00275 
00276     virtual Connector3* child(uint i, bool mode = 0) = 0;
00277     virtual const Connector3* child(uint i) const = 0;
00278 
00285     virtual Connector1* edge(uint i) const = 0;
00286 
00293     virtual Connector2* face(uint i) const = 0;
00294 
00301     virtual Connector0* vertex(uint i) const = 0;
00302   protected: 
00307     inline Connector3(const Attribute attrib, const Key& key)
00308       : Connector(key, attrib) {};
00309 
00313     static uint cnt_;
00314   };
00315 
00316 } // namespace concepts
00317 
00318 
00319 namespace test {
00320 
00321 
00322   // ********************************************************* ResetConnectorN **
00323 
00334   class ResetConnector0 : public concepts::Connector0 {
00335   public:
00336     static void reset() { cnt_ = 0; }
00337     static uint cnt() { return cnt_; }
00338   };
00339   class ResetConnector1 : public concepts::Connector1 {
00340   public:
00341     static void reset() { cnt_ = 0; }
00342     static uint cnt() { return cnt_; }
00343   };
00344   class ResetConnector2 : public concepts::Connector2 {
00345   public:
00346     static void reset() { cnt_ = 0; }
00347     static uint cnt() { return cnt_; }
00348   };
00349   class ResetConnector3 : public concepts::Connector3 {
00350   public:
00351     static void reset() { cnt_ = 0; }
00352     static uint cnt() { return cnt_; }
00353   };
00354 }
00355 
00356 #endif // Connector_hh

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