Skip to content

Commit 81f3cc4

Browse files
committed
begin/end logic defined privately
1 parent 58bcfec commit 81f3cc4

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

include/alp/amf-based/vector.hpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ namespace alp {
122122
class VectorIterator:
123123
public std::iterator< std::random_access_iterator_tag, T > {
124124

125-
friend VectorIterator internal::begin<>( self_type & v ) noexcept;
126-
friend VectorIterator internal::end<>( self_type & v ) noexcept;
125+
friend class Vector< T, structures::General, Density::Dense, View, ImfR, ImfC, backend >;
127126

128127
private:
129128

@@ -132,12 +131,12 @@ namespace alp {
132131
self_type * vec;
133132
index_type position;
134133

135-
VectorIterator( self_type * v ) noexcept :
136-
vec( v ), position( 0 )
134+
VectorIterator( self_type * vptr ) noexcept :
135+
vec( vptr ), position( 0 )
137136
{}
138137

139-
VectorIterator( self_type * v, index_type pos ) noexcept :
140-
vec( v ), position( pos )
138+
VectorIterator( self_type * vptr, index_type pos ) noexcept :
139+
vec( vptr ), position( pos )
141140
{}
142141

143142
bool equal( const VectorIterator & other ) const noexcept {
@@ -278,10 +277,22 @@ namespace alp {
278277
return nrows( static_cast< const base_type & >( *this ) );
279278
}
280279

280+
VectorIterator begin() noexcept {
281+
return VectorIterator( this );
282+
}
283+
284+
VectorIterator end() noexcept {
285+
return VectorIterator( this, _length() );
286+
}
287+
288+
281289
public:
282290

283291
typedef VectorIterator iterator;
284292

293+
friend iterator internal::begin<>( self_type & v ) noexcept;
294+
friend iterator internal::end<>( self_type & v ) noexcept;
295+
285296
/** @see Vector::value_type. */
286297
using value_type = T;
287298

@@ -468,13 +479,13 @@ namespace alp {
468479
template< typename T, typename Structure, typename View, typename ImfR, typename ImfC, enum Backend backend >
469480
typename alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend >::iterator
470481
begin( alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend > & v ) noexcept {
471-
return typename alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend >::iterator( &v );
482+
return v.begin();
472483
}
473484

474485
template< typename T, typename Structure, typename View, typename ImfR, typename ImfC, enum Backend backend >
475486
typename alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend >::iterator
476487
end( alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend > & v ) noexcept {
477-
return typename alp::Vector< T, Structure, Density::Dense, View, ImfR, ImfC, backend >::iterator( &v, getLength( v ) );
488+
return v.end();
478489
}
479490

480491
} // end namespace ``alp::internal''

0 commit comments

Comments
 (0)