Original Authors: Corwin Joy * Michael Gradman cjoy@ * hous ton.r r.co mMicha Caminus, Suite 1150, Two Allen Center, 1200 Smith Street, Houston, TX 77002 This class is an extension of variant_bidirectional_iterator to a filter_iterator similar to boost's. el.G radma n@ca minus .com更多...
#include <variant_filter_iterator.h>
类 | |
struct | Iter |
The actual iterator object is held as a template parameter here. 更多... | |
struct | IterBase |
Abstract base class for the iterator type. 更多... | |
struct | Pred |
The actual predicate is held as a template parameter here. 更多... | |
struct | PredBase |
Abstract base class for the predicate. 更多... | |
Public 类型 | |
using | iterator_category = std::forward_iterator_tag |
using | value_type = Type |
using | difference_type = std::ptrdiff_t |
using | pointer = PointerType |
using | reference = ReferenceType |
typedef variant_filter_iterator < Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType > | Iterator |
Shortcut name for the fully-qualified typename. 更多... | |
Public 成员函数 | |
template<typename PredType , typename IterType > | |
variant_filter_iterator (const IterType &d, const IterType &e, const PredType &p) | |
Templated Constructor. 更多... | |
variant_filter_iterator ()=default | |
Default Constructor. 更多... | |
variant_filter_iterator (const Iterator &rhs) | |
Copy Constructor. 更多... | |
template<class OtherType , class OtherReferenceType , class OtherPointerType , class OtherConstType , class OtherConstReferenceType , class OtherConstPointerType > | |
variant_filter_iterator (const variant_filter_iterator< Predicate, OtherType, OtherReferenceType, OtherPointerType, OtherConstType, OtherConstReferenceType, OtherConstPointerType > &rhs) | |
Copy construct from another (similar) variant_filter_iterator. 更多... | |
virtual | ~variant_filter_iterator ()=default |
Destructor. 更多... | |
ReferenceType | operator* () const |
unary op*() forwards on to Iter::op* () 更多... | |
PointerType | operator-> () const |
op->() 更多... | |
Iterator & | operator++ () |
op++() forwards on to Iter::op++ () 更多... | |
const Iterator | operator++ (int) |
postfix op++(), creates a temporary! 更多... | |
bool | equal (const variant_filter_iterator &other) const |
Forwards to the equal() function defined for the IterBase pointer. 更多... | |
void | swap (Iterator &lhs, Iterator &rhs) |
swap, used to implement op= 更多... | |
Iterator & | operator= (const Iterator &rhs) |
Assignment operator. 更多... | |
Public 属性 | |
std::unique_ptr< IterBase > | data |
Ideally this private member data should have protected access. 更多... | |
std::unique_ptr< IterBase > | end |
Also have a polymorphic pointer to the end object, this prevents iterating past the end. 更多... | |
std::unique_ptr< PredBase > | pred |
The predicate object. 更多... | |
Private 成员函数 | |
void | satisfy_predicate () |
Advances the data pointer until it reaches the end or the predicate is satisfied. 更多... | |
Original Authors: Corwin Joy * Michael Gradman cjoy@ * hous ton.r r.co mMicha Caminus, Suite 1150, Two Allen Center, 1200 Smith Street, Houston, TX 77002 This class is an extension of variant_bidirectional_iterator to a filter_iterator similar to boost's. el.G radma n@ca minus .com
The filter iterator is modeled after a forward_iterator since to go backward and forward requires the storage of both a "begin" and "end" iterator to avoid stepping off the end or the beginning. To reduce complexity, we only allow traversal in one direction.
在文件 variant_filter_iterator.h 第 52 行定义.
using variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::difference_type = std::ptrdiff_t |
在文件 variant_filter_iterator.h 第 57 行定义.
typedef variant_filter_iterator<Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType> variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::Iterator |
Shortcut name for the fully-qualified typename.
在文件 variant_filter_iterator.h 第 65 行定义.
using variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::iterator_category = std::forward_iterator_tag |
在文件 variant_filter_iterator.h 第 55 行定义.
using variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::pointer = PointerType |
在文件 variant_filter_iterator.h 第 58 行定义.
using variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::reference = ReferenceType |
在文件 variant_filter_iterator.h 第 59 行定义.
using variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::value_type = Type |
在文件 variant_filter_iterator.h 第 56 行定义.
|
inline |
Templated Constructor.
Allows you to construct the iterator and predicate from any types. Also advances the data pointer to the first entry which satisfies the predicate.
在文件 variant_filter_iterator.h 第 325 行定义.
|
default |
Default Constructor.
|
inline |
Copy Constructor.
Copy the internal data instead of sharing it.
在文件 variant_filter_iterator.h 第 344 行定义.
|
inline |
Copy construct from another (similar) variant_filter_iterator.
The Predicate is the same, but the Type, ReferenceType and PointerType are different. Example: You are iterating over a std::vector<int *> with std::vector<int *>::iterator Then, you have: Type=int * , ReferenceType=int *& , PointerType=int ** On the other hand, when you iterate using std::vector<int *>::const_iterator you have: Type=int * const, ReferenceType=int * const & , PointerType=int * const *
在文件 variant_filter_iterator.h 第 362 行定义.
|
virtualdefault |
Destructor.
|
inline |
Forwards to the equal()
function defined for the IterBase pointer.
在文件 variant_filter_iterator.h 第 416 行定义.
|
inline |
unary op*() forwards on to Iter::op*
()
在文件 variant_filter_iterator.h 第 378 行定义.
|
inline |
op++() forwards on to Iter::op++
()
在文件 variant_filter_iterator.h 第 394 行定义.
参考 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::data , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::satisfy_predicate().
|
inline |
postfix op++(), creates a temporary!
在文件 variant_filter_iterator.h 第 404 行定义.
参考 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::data , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::satisfy_predicate().
|
inline |
|
inline |
Assignment operator.
在文件 variant_filter_iterator.h 第 439 行定义.
|
inlineprivate |
Advances the data pointer until it reaches the end or the predicate is satisfied.
在文件 variant_filter_iterator.h 第 454 行定义.
参考 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::data , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::end.
参考自 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::operator++() , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::variant_filter_iterator().
|
inline |
swap, used to implement op=
在文件 variant_filter_iterator.h 第 424 行定义.
参考 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::data, variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::end , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::pred.
std::unique_ptr<IterBase> variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::data |
Ideally this private member data should have protected access.
However, if we want a const_iterator to be constructable from an non-const one, templated versions of the same class (not related by inheritance) will need to know about these private members. Thus, they have public access.
Polymorphic pointer to the object. Don't confuse with the data pointer located in the Iter!
在文件 variant_filter_iterator.h 第 301 行定义.
参考自 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::equal(), variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::operator*(), variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::operator++(), variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::satisfy_predicate() , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::swap().
std::unique_ptr<IterBase> variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::end |
Also have a polymorphic pointer to the end object, this prevents iterating past the end.
在文件 variant_filter_iterator.h 第 307 行定义.
参考自 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::satisfy_predicate() , 以及 variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::swap().
std::unique_ptr<PredBase> variant_filter_iterator< Predicate, Type, ReferenceType, PointerType, ConstType, ConstReferenceType, ConstPointerType >::pred |
The predicate object.
Must have op() capable of operating on IterBase * pointers. Therefore it has to follow the same paradigm as IterBase
.
在文件 variant_filter_iterator.h 第 314 行定义.