synaps/base/strideiter.h

00001 
00002 #ifndef SYNAPS_UTIL_STRIDEITER_H
00003 #define SYNAPS_UTIL_STRIDEITER_H
00004 
00005 #include <synaps/init.h>
00006 
00007 __BEGIN_NAMESPACE_SYNAPS
00008 
00009 template <class T, class T_ref, class T_ptr, class T_stride>
00010 class stride_iterator {
00011 public:
00012 
00013   typedef T                              coef_t;
00014   typedef T_ref                          reference_t;
00015   typedef T_ptr                          pointer_t;
00016   typedef T_stride                       stride_t;
00017   typedef unsigned int                   index_t;
00018 
00019   typedef stride_iterator<coef_t,reference_t,pointer_t,stride_t>
00020                                          self_t;
00021 
00022   stride_iterator( pointer_t const ptr,  stride_t const stride)
00023     : my_rep(ptr), my_stride(stride), my_pos(0) {};
00024 
00025   self_t&
00026   operator++() { ++my_pos; my_rep += my_stride; return *this;}
00027 
00028   reference_t operator*() {return (this);}
00029 
00030   pointer_t operator->() {return my_rep;}
00031 
00032   bool operator!=( self_t const& rhs) { return my_rep != rhs.my_rep; }
00033   bool operator<=( self_t const& rhs) { return my_rep <= rhs.my_rep; }
00034 
00035   index_t
00036   pos() const { return my_pos;}
00037 
00038 private:
00039   pointer_t my_rep;
00040   stride_t const my_stride;
00041 };
00042 
00043 __END_NAMESPACE_SYNAPS
00044 
00045 #endif // SYNAPS_UTIL_STRIDEITER_H

SYNAPS DOCUMENTATION
logo