Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

CoordinateEnumerators.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Array_Trait_CoordinateEnumerators_h
00002 #define Impala_Core_Array_Trait_CoordinateEnumerators_h
00003 
00004 namespace Impala
00005 {
00006 namespace Core
00007 {
00008 namespace Array
00009 {
00010 namespace Trait
00011 {
00012 
00013 
00014 /* the default Coordinate Enumerator Enums all Coords in an image
00015 Coordinate Enumerators are responsible for the looping through images
00016 */
00017 /*
00018 template<ArrayT>
00019 class CoordinateEnumeratorAll
00020 {
00021 public:
00022     CoordinateEnumeratorAll(ArrayT* array)
00023     {
00024         mWidth = array->CW();
00025         mHeight = array->CH();
00026         mX = 0;
00027         mY = 0;
00028         mDone = false;
00029     }
00030 
00031     inline Array::StorType* AccessPointer(ArrayT* array)
00032     {
00033         return array->CPB(mX, mY);
00034     }
00035 
00036     inline void NextCoordinate()
00037     {
00038         mX++;
00039         if (mX >= mWidth)
00040         {
00041             mX = 0;
00042             mY++;
00043             if (mY >= mHeight)
00044             {  
00045                 mDone = true;
00046                 mY = 0;
00047             }
00048         }
00049     }
00050 
00051     inline bool Array::Done()
00052     {
00053         return mDone;
00054     }
00055 
00056 private:
00057     int mHeight, mWidth;
00058     int mX, mY;
00059     bool mDone;
00060 };
00061 */
00062 template<class DstArrayT, class SrcArrayT>
00063 class CoordinateEnumeratorAll2
00064 {
00065 public:
00066     CoordinateEnumeratorAll2(DstArrayT* dst, SrcArrayT* src)
00067     {
00068         mWidth = dst->CW();
00069         mHeight = dst->CH();
00070         mX = 0;
00071         mY = 0;
00072         mDone = false;
00073         mSrcPointer = dst->CPB(mX, mY);
00074         mDstPointer = src->CPB(mX, mY);
00075     }
00076 
00077     typename DstArrayT::StorType*
00078     DstPointer(DstArrayT* dst)
00079     {
00080         return mDstPointer;
00081     }
00082 
00083     typename SrcArrayT::ArithType*
00084     SrcPointer(SrcArrayT* src)
00085     {
00086         return mSrcPointer;
00087     }
00088 
00089     void
00090     NextCoordinate(DstArrayT* dst, SrcArrayT* src)
00091     {
00092         mX++;
00093         mDstPointer += DstArrayT::ElemSize();
00094         mSrcPointer += SrcArrayT::ElemSize();
00095         if (mX >= mWidth)
00096         {
00097             mX = 0;
00098             mY++;
00099             mDstPointer = dst->CPB(mX, mY);
00100             mSrcPointer = src->CPB(mX, mY);
00101             if (mY >= mHeight)
00102             {  
00103                 mDone = true;
00104                 mY = 0;
00105             }
00106         }
00107     }
00108 
00109     bool
00110     Done() const
00111     {
00112         return mDone;
00113     }
00114 
00115     int
00116     X() const
00117     {
00118         return mX;
00119     }
00120 
00121     int
00122     Y() const
00123     {
00124         return mY;
00125     }
00126 
00127 private:
00128     int mHeight, mWidth;
00129     int mX, mY;
00130     bool mDone;
00131     typename DstArrayT::StorType* mDstPointer;
00132     typename SrcArrayT::ArithType* mSrcPointer;
00133 };
00134 
00135 /********
00136  * rect *
00137  ********/
00138 
00139 #include "Core/Geometry/Rectangle.h"
00140 
00141 template<class DstArrayT, class SrcArrayT>
00142 class CoordinateEnumeratorRect
00143 {
00144 public:
00145     CoordinateEnumeratorRect(DstArrayT* dst, SrcArrayT* src,
00146                              const Geometry::Rectangle& rect)
00147         :mRect(rect)
00148     {
00149         mX = rect.mLeft;
00150         mY = rect.mTop;
00151         mDone = false;
00152         mDstPointer = dst->CPB(mX, mY);
00153         mSrcPointer = src->CPB(mX, mY);
00154     }
00155 
00156     typename DstArrayT::StorType*
00157     DstPointer(DstArrayT* dst)
00158     {
00159         return mDstPointer;
00160     }
00161 
00162     typename SrcArrayT::StorType*
00163     SrcPointer(SrcArrayT* src)
00164     {
00165         return mSrcPointer;
00166     }
00167 
00168     void
00169     NextCoordinate(DstArrayT* dst, SrcArrayT* src)
00170     {
00171         mX++;
00172         mDstPointer += DstArrayT::ElemSize();
00173         mSrcPointer += SrcArrayT::ElemSize();
00174         if (mX >= mRect.Right())
00175         {
00176             mX = mRect.Left();
00177             mY++;
00178             mDstPointer = dst->CPB(mX, mY);
00179             mSrcPointer = src->CPB(mX, mY);
00180             if (mY >= mRect.Bottom())
00181             {  
00182                 mDone = true;
00183                 mY = mRect.Top();
00184             }
00185         }
00186     }
00187 
00188     bool
00189     Done() const
00190     {
00191         return mDone;
00192     }
00193 
00194     int
00195     X() const
00196     {
00197         return mX;
00198     }
00199 
00200     int
00201     Y() const
00202     {
00203         return mY;
00204     }
00205 
00206 private:
00207     const Geometry::Rectangle& mRect;
00208     int mX, mY;
00209     bool mDone;
00210     typename DstArrayT::StorType* mDstPointer;
00211     typename SrcArrayT::StorType* mSrcPointer;
00212 };
00213 
00214 } // namespace Trait
00215 } // namespace Array
00216 } // namespace Core
00217 } // namespace Impala
00218 
00219 #endif

Generated on Fri Mar 19 09:30:55 2010 for ImpalaSrc by  doxygen 1.5.1