Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 #ifndef __UTIL_TRANSPOSE_PREFIX__
00038 #define __UTIL_TRANSPOSE_PREFIX__
00039 
00040 #include "rect_list.hpp"
00041 
00042 namespace util{
00055 template <typename T, typename Pr>
00056 class TransposePrefix2D
00057 {
00058 private:
00059   
00060   TransposePrefix2D(const TransposePrefix2D& c);
00061   TransposePrefix2D& operator= (const TransposePrefix2D& c);
00062   TransposePrefix2D();
00063   const Pr& originalMatrix;
00064   
00065 
00069   class Intermediate
00070   {
00071   public:
00072     const TransposePrefix2D& a;
00073     int x;
00074     
00075     Intermediate(const TransposePrefix2D& ar, int xval)
00076       :a(ar),x(xval)
00077     {
00078     }
00079 
00080     T operator[] (int y) const
00081     {
00082       return a.originalMatrix[y][x];
00083     }
00084   };
00085 
00086 public:
00092   TransposePrefix2D(const Pr& psa)
00093     :originalMatrix(psa){}
00097   int prefixsizeX() const {return originalMatrix.prefixsizeY();}
00104   int prefixsizeY() const{return originalMatrix.prefixsizeX();}
00105   
00106   
00107   Intermediate operator[] (int x) const{return Intermediate(*this,x);}
00108   ~TransposePrefix2D(){}
00109 
00110 
00111   static void convertRectList( const util::RectList<T, util::TransposePrefix2D<T, Pr> > & intermediate, 
00112                                util::RectList<T,Pr> &parts)
00113   {
00114     
00115     for (typename util::RectList<T,Pr>::container::const_iterator it = intermediate.rectangles.begin();
00116          it != intermediate.rectangles.end();
00117          it++)
00118       {
00119         parts.add_rect(util::rectangle(it->y_top_l,it->y_bot_r,it->x_top_l,it->x_bot_r));
00120       }
00121 
00122   }
00123 };
00124 }
00125 #endif
00126