00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef HxNgbLWshed2d_h
00011 #define HxNgbLWshed2d_h
00012
00013 #include "HxClassName.h"
00014 #include "HxSizes.h"
00015 #include "HxCategories.h"
00016 #include "HxTagList.h"
00017
00018
00019
00024 template <class ArgType, class ResType>
00025 class HxNgbLWshed2d
00026 {
00027 public:
00028
00030 typedef HxTagLoop IteratorCategory;
00031
00033 typedef HxTag1Phase PhaseCategory;
00034
00035
00036
00037
00043 HxNgbLWshed2d(HxTagList& tags);
00044
00046 ~HxNgbLWshed2d();
00047
00049 HxSizes size();
00050
00052 void init(int, int, ArgType);
00053
00055 void next(int x, int y, ArgType value);
00056
00058 ResType result() const;
00059
00061 static HxString className();
00062
00063 private:
00064 int _pctIdx;
00065 int _size;
00066 int _conn;
00067 int _wshedval;
00068
00069 ArgType* _values;
00070 int _i;
00071 };
00072
00073 template <class ArgType, class ResType>
00074 ostream&
00075 operator<<(ostream& os, const HxNgbLWshed2d<ArgType, ResType>& pct)
00076 {
00077 return pct.put(os);
00078 }
00079
00080 template <class ArgType, class ResType>
00081 inline HxString
00082 HxNgbLWshed2d<ArgType, ResType>::className()
00083 {
00084 static HxString s("lwshed");
00085 return s;
00086 }
00087
00088 template <class ArgType, class ResType>
00089 inline void
00090 HxNgbLWshed2d<ArgType, ResType>::init(int, int, ArgType)
00091 {
00092 _i = 0;
00093 }
00094
00095 template <class ArgType, class ResType>
00096 inline void
00097 HxNgbLWshed2d<ArgType, ResType>::next(int, int, ArgType value)
00098 {
00099 _values[_i++] = value;
00100 }
00101
00102 template <class ArgType, class ResType>
00103 inline HxSizes
00104 HxNgbLWshed2d<ArgType, ResType>::size()
00105 {
00106
00107 return HxSizes(3, 3, 1);
00108 }
00109
00110 template <class ArgType, class ResType>
00111 inline ResType
00112 HxNgbLWshed2d<ArgType, ResType>::result() const
00113 {
00114 ArgType minval=_values[_pctIdx];
00115 if(_conn==4)
00116 {
00117 if( _values[1] < minval && _values[1]>_wshedval)
00118 minval = _values[1];
00119 if( _values[3] < minval && _values[3]>_wshedval)
00120 minval = _values[3];
00121 if( _values[5] < minval && _values[5]>_wshedval)
00122 minval = _values[5];
00123 if( _values[7] < minval && _values[7]>_wshedval)
00124 minval = _values[7];
00125
00126 if(minval<_values[_pctIdx])
00127 return _wshedval;
00128 else
00129 return _values[_pctIdx];
00130 }
00131 if(_conn==8)
00132 {
00133 if( _values[0] < minval && _values[0]>_wshedval)
00134 minval = _values[0];
00135 if( _values[1] < minval && _values[1]>_wshedval)
00136 minval = _values[1];
00137 if( _values[2] < minval && _values[2]>_wshedval)
00138 minval = _values[2];
00139 if( _values[3] < minval && _values[3]>_wshedval)
00140 minval = _values[3];
00141 if( _values[5] < minval && _values[5]>_wshedval)
00142 minval = _values[5];
00143 if( _values[6] < minval && _values[6]>_wshedval)
00144 minval = _values[6];
00145 if( _values[7] < minval && _values[7]>_wshedval)
00146 minval = _values[7];
00147 if( _values[8] < minval && _values[8]>_wshedval)
00148 minval = _values[8];
00149
00150 if(minval>_wshedval && minval<_values[_pctIdx])
00151 return _wshedval;
00152 else
00153 return _values[_pctIdx];
00154 }
00155
00156 return _values[_pctIdx];
00157 }
00158
00159
00160 #ifdef INC_TEMPLATE_SRC
00161 #include "HxNgbLWshed2d.c"
00162 #endif
00163
00164
00165 #endif