Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxNgbLWshed2d.h

00001 /*
00002  *  Copyright (c) 2002, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Leon Todoran            (todoran@science.uva.nl)
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 //#include "HxSampleFunTem.h"
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                             //HxNgbLWshed2d();
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;  //this is 3
00066     int                     _conn;  //connectivity 4 or 8
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 //    return HxSizes(_size, _size, 1);
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

Generated on Tue Feb 3 14:18:40 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001