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