8#ifndef INCLUDED_BSLSTL_TREEITERATOR
9#define INCLUDED_BSLSTL_TREEITERATOR
171#include <bslscm_version.h>
189#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
215template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
217#if defined(BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD)
218 :
public std::iterator<std::bidirectional_iterator_tag, VALUE>
233 template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
236#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
237 template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
242 template <
class OTHER_VALUE,
class OTHER_NODE,
class OTHER_DIFFERENCE_TYPE>
268#ifndef BSLS_PLATFORM_CMP_SUN
273 template <
class NON_CONST_ITERATOR>
275 const NON_CONST_ITERATOR& original,
279 : d_node_p(static_cast<const NcIter&>(original).d_node_p)
290 : d_node_p(original.d_node_p)
357template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
361#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
366template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
375template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
384template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
397template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
404template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
408: d_node_p(const_cast<
bslalg::RbTreeNode *>(node))
413template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
422template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
432template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
439 return static_cast<NODE *
>(d_node_p)->value();
442template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
452template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
461template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
466 return lhs.d_node_p == rhs.d_node_p;
469#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
470template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
475 return lhs.d_node_p != rhs.d_node_p;
479template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
489template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
491TreeIterator<VALUE, NODE, DIFFERENCE_TYPE>
502#ifndef BSLS_PLATFORM_CMP_SUN
503# ifndef BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
506template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
Definition bslalg_rbtreenode.h:377
Definition bslstl_treeiterator.h:222
NcType value_type
Definition bslstl_treeiterator.h:248
DIFFERENCE_TYPE difference_type
Definition bslstl_treeiterator.h:249
TreeIterator(const TreeIterator &original)=default
reference operator*() const
Definition bslstl_treeiterator.h:435
bsl::bidirectional_iterator_tag iterator_category
Definition bslstl_treeiterator.h:247
TreeIterator & operator=(const TreeIterator &rhs)=default
TreeIterator(const NON_CONST_ITERATOR &original, typename bsl::enable_if< bsl::is_convertible< NON_CONST_ITERATOR, NcIter >::value, int >::type=0)
Definition bslstl_treeiterator.h:274
VALUE & reference
Standard iterator defined types [24.4.2].
Definition bslstl_treeiterator.h:253
VALUE * pointer
Definition bslstl_treeiterator.h:250
TreeIterator & operator++()
Definition bslstl_treeiterator.h:416
const bslalg::RbTreeNode * node() const
Definition bslstl_treeiterator.h:455
pointer operator->() const
Definition bslstl_treeiterator.h:445
friend class TreeIterator
Definition bslstl_treeiterator.h:243
friend bool operator==(const TreeIterator< VALUE1, NODEPTR, DIFF > &, const TreeIterator< VALUE2, NODEPTR, DIFF > &)
Definition bslstl_treeiterator.h:463
friend bool operator!=(const TreeIterator< VALUE1, NODEPTR, DIFF > &, const TreeIterator< VALUE2, NODEPTR, DIFF > &)
Definition bslstl_treeiterator.h:472
TreeIterator & operator--()
Definition bslstl_treeiterator.h:425
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlat_valuetypefunctions.h:939
Definition bdlc_flathashmap.h:2218
Definition bslstl_algorithm.h:84
BidirectionalIterator< T, ITER_IMP, TAG_TYPE > operator--(BidirectionalIterator< T, ITER_IMP, TAG_TYPE > &iter, int)
BidirectionalIterator< T, ITER_IMP, TAG_TYPE > operator++(BidirectionalIterator< T, ITER_IMP, TAG_TYPE > &iter, int)
Definition bslmf_enableif.h:530
Definition bslmf_isconvertible.h:875
Definition bslmf_istriviallycopyable.h:324
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:128
static const RbTreeNode * previous(const RbTreeNode *node)
static const RbTreeNode * next(const RbTreeNode *node)
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:312