Alternate implementation of ChooseTwoLevelIterator. More...
#include <TwoLevelIteratorA.h>
Public Types | |
typedef TwoLevelIteratorA::iterator_adaptor_::difference_type | difference_type |
Public Member Functions | |
TwoLevelIteratorA () | |
TwoLevelIteratorA (OuterIter outer_begin, OuterIter outer_end, OuterIter outer, InnerBeginFn inner_begin_fn, InnerEndFn inner_end_fn) | |
Private Member Functions | |
void | seek_forward () |
Update base iterator to beginning of first non-empty inner range after current one. | |
template<class Iter > | |
void | safe_decrement_dispatch (std::forward_iterator_tag, Iter &it, Iter begin) |
template<class Iter > | |
void | safe_decrement_dispatch (std::bidirectional_iterator_tag, Iter &it, const Iter &begin) |
template<class Iter > | |
bool | safe_decrement (Iter &it, const Iter &begin) |
Decrement iterator or return true if it == begin. | |
template<class Iter > | |
std::iterator_traits< Iter > ::difference_type | safe_difference_dispatch (Iter it1, Iter it2, Iter end, std::input_iterator_tag) const |
template<class Iter > | |
std::iterator_traits< Iter > ::difference_type | safe_difference_dispatch (Iter it1, Iter it2, Iter end, std::random_access_iterator_tag) const |
template<class Iter > | |
std::iterator_traits< Iter > ::difference_type | safe_distance (Iter it1, Iter it2, Iter end) const |
Returns correct distances even for forward iterators when it2 is not reachable from it1. | |
void | seek_backward () |
Update base iterator to end of first non-empty inner range before current one. | |
void | increment () |
void | decrement () |
template<class DiffType = difference_type> | |
void | advance_dispatch (DiffType n, std::input_iterator_tag) |
template<class DiffType = difference_type> | |
void | jump_forward (DiffType n) |
template<class DiffType = difference_type> | |
void | jump_backward (DiffType n) |
template<class DiffType = difference_type> | |
void | advance_dispatch (DiffType n, std::random_access_iterator_tag) |
void | advance (difference_type n) |
template<class Other > | |
difference_type | distance_to_dispatch (Other it2, std::input_iterator_tag) const |
template<class Other > | |
difference_type | distance_to_dispatch (const Other &x, std::random_access_iterator_tag) const |
template<class OtherOuterIter , class OtherInnerIter , class C , class BF , class EF > | |
difference_type | distance_to (const TwoLevelIteratorA< OtherOuterIter, OtherInnerIter, C, BF, EF > &x) const |
template<class OtherOuterIter , class OtherInnerIter , class C , class BF , class EF > | |
bool | equal (const TwoLevelIteratorA< OtherOuterIter, OtherInnerIter, C, BF, EF > &x) const |
Private Attributes | |
OuterIter | m_outer_begin |
OuterIter | m_outer_end |
OuterIter | m_outer |
InnerBeginFn | m_inner_begin_fn |
InnerEndFn | m_inner_end_fn |
Friends | |
class | boost::iterator_core_access |
Alternate implementation of ChooseTwoLevelIterator.
typedef TwoLevelIteratorA::iterator_adaptor_::difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::difference_type |
Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::TwoLevelIteratorA | ( | ) | [inline] |
Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::TwoLevelIteratorA | ( | OuterIter | outer_begin, | |
OuterIter | outer_end, | |||
OuterIter | outer, | |||
InnerBeginFn | inner_begin_fn, | |||
InnerEndFn | inner_end_fn | |||
) | [inline] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::advance | ( | difference_type | n | ) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::advance_dispatch | ( | DiffType | n, | |
std::random_access_iterator_tag | ||||
) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::advance_dispatch | ( | DiffType | n, | |
std::input_iterator_tag | ||||
) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::decrement | ( | ) | [inline, private] |
difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::distance_to | ( | const TwoLevelIteratorA< OtherOuterIter, OtherInnerIter, C, BF, EF > & | x | ) | const [inline, private] |
difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::distance_to_dispatch | ( | const Other & | x, | |
std::random_access_iterator_tag | ||||
) | const [inline, private] |
difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::distance_to_dispatch | ( | Other | it2, | |
std::input_iterator_tag | ||||
) | const [inline, private] |
bool Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::equal | ( | const TwoLevelIteratorA< OtherOuterIter, OtherInnerIter, C, BF, EF > & | x | ) | const [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::increment | ( | ) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::jump_backward | ( | DiffType | n | ) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::jump_forward | ( | DiffType | n | ) | [inline, private] |
bool Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_decrement | ( | Iter & | it, | |
const Iter & | begin | |||
) | [inline, private] |
Decrement iterator or return true if it == begin.
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_decrement_dispatch | ( | std::bidirectional_iterator_tag | , | |
Iter & | it, | |||
const Iter & | begin | |||
) | [inline, private] |
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_decrement_dispatch | ( | std::forward_iterator_tag | , | |
Iter & | it, | |||
Iter | begin | |||
) | [inline, private] |
std::iterator_traits<Iter>::difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_difference_dispatch | ( | Iter | it1, | |
Iter | it2, | |||
Iter | end, | |||
std::random_access_iterator_tag | ||||
) | const [inline, private] |
std::iterator_traits<Iter>::difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_difference_dispatch | ( | Iter | it1, | |
Iter | it2, | |||
Iter | end, | |||
std::input_iterator_tag | ||||
) | const [inline, private] |
std::iterator_traits<Iter>::difference_type Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::safe_distance | ( | Iter | it1, | |
Iter | it2, | |||
Iter | end | |||
) | const [inline, private] |
Returns correct distances even for forward iterators when it2 is not reachable from it1.
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::seek_backward | ( | ) | [inline, private] |
Update base iterator to end of first non-empty inner range before current one.
Also update outer iterators appropriately.
void Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::seek_forward | ( | ) | [inline, private] |
Update base iterator to beginning of first non-empty inner range after current one.
Also update outer iterators appropriately.
friend class boost::iterator_core_access [friend] |
InnerBeginFn Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::m_inner_begin_fn [private] |
InnerEndFn Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::m_inner_end_fn [private] |
OuterIter Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::m_outer [private] |
OuterIter Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::m_outer_begin [private] |
OuterIter Galois::TwoLevelIteratorA< OuterIter, InnerIter, CategoryOrTraversal, InnerBeginFn, InnerEndFn >::m_outer_end [private] |