CastAccessor.hpp

00001 #ifndef IMAGE_CASTACCESSOR_H
00002 #define IMAGE_CASTACCESSOR_H
00003 
00004 
00005 #include <image/ImageAccessorInterface.hpp>
00006 
00007 namespace imaging
00008 {
00009 
00016   template <class image_t, class DATA_t = float_t>
00017   class CastAccessor : public ImageAccessorInterface<image_t, DATA_t>
00018   {
00019   public:
00020     static const size_t dimension = ImageAccessorInterface<image_t, DATA_t>::dimension;
00021     typedef DATA_t data_t;
00022 
00023   private:
00025     class data_reference
00026     {
00027       CastAccessor<image_t, DATA_t> & _accessor_reference;
00028       const ublas::fixed_vector<size_t, dimension> & _index_reference;
00029 
00030     public:
00031       data_reference(CastAccessor<image_t, DATA_t> & accessor, const ublas::fixed_vector<size_t, dimension> & index) : _accessor_reference(accessor), _index_reference(index) {}
00032 
00033       DATA_t operator=(const DATA_t & input)
00034       { _accessor_reference._image_reference[_index_reference] = (typename image_t::data_t)(input); return input; }
00035 
00036       operator DATA_t() const { return DATA_t(_accessor_reference._image_reference[_index_reference]); }
00037     };
00040   public:
00044     CastAccessor(image_t & image) : ImageAccessorInterface<image_t, DATA_t>(image) {}
00045 
00046     DATA_t operator[](const ublas::fixed_vector<size_t, dimension> & index) const { return DATA_t(ImageAccessorInterface<image_t, DATA_t>::_image_reference[index]); }
00047     data_reference operator[](const ublas::fixed_vector<size_t, dimension> & index) { return data_reference(*this, index); }
00048   };
00049 
00050 }
00051 
00052 #endif

Generated on Tue Feb 10 10:01:30 2009 for imaging2 by  doxygen 1.5.5