| 81 | } |
| 82 | |
| 83 | class iterator { |
| 84 | public: |
| 85 | typedef stored_type reference ; |
| 86 | typedef stored_type* pointer ; |
| 87 | typedef R_xlen_t difference_type ; |
| 88 | typedef stored_type value_type; |
| 89 | typedef std::random_access_iterator_tag iterator_category ; |
| 90 | |
| 91 | iterator( const MatrixBase& object_, R_xlen_t index_ ) : |
| 92 | object(object_), i(0), j(0), nr(object_.nrow()), nc(object_.ncol()) { |
| 93 | |
| 94 | update_index( index_) ; |
| 95 | } |
| 96 | |
| 97 | iterator( const iterator& other) : |
| 98 | object(other.object), i(other.i), j(other.j), nr(other.nr), nc(other.nc){} |
| 99 | |
| 100 | inline iterator& operator++(){ |
| 101 | i++ ; |
| 102 | if( i == nr ){ |
| 103 | j++ ; |
| 104 | i=0 ; |
| 105 | } |
| 106 | return *this ; |
| 107 | } |
| 108 | inline iterator operator++(int){ |
| 109 | iterator orig(*this) ; |
| 110 | ++(*this) ; |
| 111 | return orig ; |
| 112 | } |
| 113 | |
| 114 | inline iterator& operator--(){ |
| 115 | i-- ; |
| 116 | if( i == -1 ){ |
| 117 | j-- ; |
| 118 | i = nr - 1 ; |
| 119 | } |
| 120 | return *this ; |
| 121 | } |
| 122 | inline iterator operator--(int){ |
| 123 | iterator orig(*this) ; |
| 124 | --(*this) ; |
| 125 | return orig ; |
| 126 | } |
| 127 | |
| 128 | inline iterator operator+(difference_type n) const { |
| 129 | return iterator( object, i + (j*nr) + n ) ; |
| 130 | } |
| 131 | inline iterator operator-(difference_type n) const { |
| 132 | return iterator( object, i + (j*nr) - n ) ; |
| 133 | } |
| 134 | |
| 135 | inline iterator& operator+=(difference_type n) { |
| 136 | update_index( i + j*nr + n ); |
| 137 | return *this ; |
| 138 | } |
| 139 | inline iterator& operator-=(difference_type n) { |
| 140 | update_index( i + j*nr - n ); |
no outgoing calls
no test coverage detected