proxygen
folly::detail::IteratorFacade< D, V, Tag > Class Template Reference

#include <Iterators.h>

Inheritance diagram for folly::detail::IteratorFacade< D, V, Tag >:
folly::detail::IteratorAdaptor< D, I, V, Tag >

Public Types

using value_type = V
 
using reference = value_type &
 
using pointer = value_type *
 
using difference_type = ssize_t
 
using iterator_category = Tag
 

Public Member Functions

bool operator== (D const &rhs) const
 
bool operator!= (D const &rhs) const
 
template<class D2 >
std::enable_if< std::is_convertible< D, D2 >::value, bool >::type operator== (D2 const &rhs) const
 
template<class D2 >
bool operator!= (D2 const &rhs) const
 
V & operator* () const
 
V * operator-> () const
 
Doperator++ ()
 
D operator++ (int)
 
Doperator-- ()
 
D operator-- (int)
 

Private Member Functions

DasDerived ()
 
D const & asDerivedConst () const
 

Detailed Description

template<class D, class V, class Tag>
class folly::detail::IteratorFacade< D, V, Tag >

Currently this only supports forward and bidirectional iteration. The derived class must must have definitions for these methods:

void increment(); void decrement(); // optional, to be used with bidirectional reference dereference() const; bool equal([appropriate iterator type] const& rhs) const;

These names are consistent with those used by the Boost iterator facade / adaptor classes to ease migration classes in this file.

Template parameters: D: the deriving class (CRTP) V: value type Tag: the iterator category, one of: std::forward_iterator_tag std::bidirectional_iterator_tag

Definition at line 72 of file Iterators.h.

Member Typedef Documentation

template<class D, class V, class Tag>
using folly::detail::IteratorFacade< D, V, Tag >::difference_type = ssize_t

Definition at line 77 of file Iterators.h.

template<class D, class V, class Tag>
using folly::detail::IteratorFacade< D, V, Tag >::iterator_category = Tag

Definition at line 78 of file Iterators.h.

template<class D, class V, class Tag>
using folly::detail::IteratorFacade< D, V, Tag >::pointer = value_type*

Definition at line 76 of file Iterators.h.

template<class D, class V, class Tag>
using folly::detail::IteratorFacade< D, V, Tag >::reference = value_type&

Definition at line 75 of file Iterators.h.

template<class D, class V, class Tag>
using folly::detail::IteratorFacade< D, V, Tag >::value_type = V

Definition at line 74 of file Iterators.h.

Member Function Documentation

template<class D, class V, class Tag>
D& folly::detail::IteratorFacade< D, V, Tag >::asDerived ( )
inlineprivate
template<class D, class V, class Tag>
D const& folly::detail::IteratorFacade< D, V, Tag >::asDerivedConst ( ) const
inlineprivate
template<class D, class V, class Tag>
bool folly::detail::IteratorFacade< D, V, Tag >::operator!= ( D const &  rhs) const
inline

Definition at line 84 of file Iterators.h.

84  {
85  return !operator==(rhs);
86  }
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
bool operator==(D const &rhs) const
Definition: Iterators.h:80
template<class D, class V, class Tag>
template<class D2 >
bool folly::detail::IteratorFacade< D, V, Tag >::operator!= ( D2 const &  rhs) const
inline

Definition at line 103 of file Iterators.h.

103  {
104  return !operator==(rhs);
105  }
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
bool operator==(D const &rhs) const
Definition: Iterators.h:80
template<class D, class V, class Tag>
V& folly::detail::IteratorFacade< D, V, Tag >::operator* ( ) const
inline

Definition at line 107 of file Iterators.h.

107  {
108  return asDerivedConst().dereference();
109  }
D const & asDerivedConst() const
Definition: Iterators.h:142
template<class D, class V, class Tag>
D& folly::detail::IteratorFacade< D, V, Tag >::operator++ ( )
inline

Definition at line 115 of file Iterators.h.

115  {
116  asDerived().increment();
117  return asDerived();
118  }
template<class D, class V, class Tag>
D folly::detail::IteratorFacade< D, V, Tag >::operator++ ( int  )
inline

Definition at line 120 of file Iterators.h.

120  {
121  auto ret = asDerived(); // copy
122  asDerived().increment();
123  return ret;
124  }
template<class D, class V, class Tag>
D& folly::detail::IteratorFacade< D, V, Tag >::operator-- ( )
inline

Definition at line 126 of file Iterators.h.

126  {
127  asDerived().decrement();
128  return asDerived();
129  }
template<class D, class V, class Tag>
D folly::detail::IteratorFacade< D, V, Tag >::operator-- ( int  )
inline

Definition at line 131 of file Iterators.h.

131  {
132  auto ret = asDerived(); // copy
133  asDerived().decrement();
134  return ret;
135  }
template<class D, class V, class Tag>
V* folly::detail::IteratorFacade< D, V, Tag >::operator-> ( ) const
inline

Definition at line 111 of file Iterators.h.

111  {
112  return std::addressof(operator*());
113  }
template<class D, class V, class Tag>
bool folly::detail::IteratorFacade< D, V, Tag >::operator== ( D const &  rhs) const
inline

Definition at line 80 of file Iterators.h.

Referenced by folly::detail::IteratorFacade< dynamic::const_key_iterator, dynamic const , std::forward_iterator_tag >::operator!=().

80  {
81  return asDerivedConst().equal(rhs);
82  }
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
D const & asDerivedConst() const
Definition: Iterators.h:142
template<class D, class V, class Tag>
template<class D2 >
std::enable_if<std::is_convertible<D, D2>::value, bool>::type folly::detail::IteratorFacade< D, V, Tag >::operator== ( D2 const &  rhs) const
inline

Definition at line 98 of file Iterators.h.

98  {
99  return D2(asDerivedConst()) == rhs;
100  }
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
D const & asDerivedConst() const
Definition: Iterators.h:142

The documentation for this class was generated from the following file: