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

hp2D/edgeMinMax.hh
Go to the documentation of this file.
00001 /* @file edgeMinMax.hh  Class for rules for polynomial degrees of edges
00002 
00003    @author Kersten Schmidt, 2008
00004  */
00005 
00006 #ifndef hp2DedgeMinMax_hh
00007 #define hp2DedgeMinMax_hh
00008 
00009 #include "basics/outputOperator.hh"
00010 #include "basics/cloneable.hh"
00011 
00012 namespace hp2D {
00013 
00014   // ********************************************************** PolyEdgeRule **
00015 
00020   class PolyEdgeRule : public concepts::OutputOperator,
00021            public concepts::Cloneable {
00022   public:
00023     virtual PolyEdgeRule* clone() const = 0;
00027     virtual void pUnderChildren(ushort& p, ushort pChild) const = 0;
00031     virtual void pFromChildren(ushort& p, ushort pChild) const {
00032       p = std::min(p, pChild); // seems to be equal as 
00033     }
00037     virtual void pEdge(ushort& p, ushort pEdge) const = 0;
00038   protected:
00039     virtual std::ostream& info(std::ostream& os) const {
00040       return os << "PolyEdgeRule()";
00041     }
00042   };
00043     
00044     
00045   // *********************************************************** PolyEdgeMax **
00046 
00051   class PolyEdgeMax : public PolyEdgeRule {
00052   public:
00053     virtual PolyEdgeMax* clone() const { return new PolyEdgeMax(); }
00057     virtual void pUnderChildren(ushort& p, ushort pChild) const {
00058       p = std::max(p, pChild);
00059     }
00063     virtual void pFromChildren(ushort& p, ushort pChild) const {
00064       p = std::max(p, pChild);
00065     }
00069     virtual void pEdge(ushort& p, ushort pInner) const {
00070       p = std::max(p, pInner);
00071     }
00072   protected:
00073     virtual std::ostream& info(std::ostream& os) const {
00074       return os << "PolyEdgeMax()";
00075     }
00076   };
00077 
00078   // *********************************************************** PolyEdgeMin **
00079 
00084   class PolyEdgeMin : public PolyEdgeRule {
00085   public:
00086     virtual PolyEdgeMin* clone() const { return new PolyEdgeMin(); }
00090     virtual void pUnderChildren(ushort& p, ushort pChild) const {
00091       p = std::min(p, pChild);
00092     }
00096     virtual void pEdge(ushort& p, ushort pInner) const {
00097       p = std::min(p, pInner);
00098     }
00099   protected:
00100     virtual std::ostream& info(std::ostream& os) const {
00101       return os << "PolyEdgeMin()";
00102     }
00103   };
00104 
00105   // ********************************************** PolyEdgeMinNeighMaxChild **
00106 
00112   class PolyEdgeMinNeighMaxChild : public PolyEdgeRule {
00113   public:
00114     virtual PolyEdgeMinNeighMaxChild* clone() const { 
00115       return new PolyEdgeMinNeighMaxChild(); }
00119     virtual void pUnderChildren(ushort& p, ushort pChild) const {
00120       p = std::max(p, pChild);
00121     }
00125     virtual void pEdge(ushort& p, ushort pInner) const {
00126       p = std::min(p, pInner);
00127     }
00128   protected:
00129     virtual std::ostream& info(std::ostream& os) const {
00130       return os << "PolyEdgeMinNeighMaxChild()";
00131     }
00132   };
00133 
00134 } // namespace hp2D
00135 
00136 #endif // hp2DedgeMinMax_hh

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