Go to the documentation of this file.00001
00002
00003
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
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);
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
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
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
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 }
00135
00136 #endif // hp2DedgeMinMax_hh