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>
266#ifndef BSLS_PLATFORM_CMP_SUN
270 template <
class NON_CONST_ITERATOR>
272 const NON_CONST_ITERATOR& original,
276 : d_node_p(static_cast<const
NcIter&>(original).d_node_p)
287 : d_node_p(original.d_node_p)
349template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
353#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
358template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
366template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
374template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
387template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
394template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
398: d_node_p(const_cast<
bslalg::RbTreeNode *>(node))
403template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
412template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
422template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
429 return static_cast<NODE *
>(d_node_p)->value();
432template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
442template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
451template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
456 return lhs.d_node_p == rhs.d_node_p;
459#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
460template <
class VALUE1,
class VALUE2,
class NODEPTR,
class DIFF>
465 return lhs.d_node_p != rhs.d_node_p;
469template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
479template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
481TreeIterator<VALUE, NODE, DIFFERENCE_TYPE>
492#ifndef BSLS_PLATFORM_CMP_SUN
493# ifndef BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
496template <
class VALUE,
class NODE,
class DIFFERENCE_TYPE>
Definition bslalg_rbtreenode.h:376
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:425
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:271
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:406
const bslalg::RbTreeNode * node() const
Definition bslstl_treeiterator.h:445
pointer operator->() const
Definition bslstl_treeiterator.h:435
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:453
friend bool operator!=(const TreeIterator< VALUE1, NODEPTR, DIFF > &, const TreeIterator< VALUE2, NODEPTR, DIFF > &)
Definition bslstl_treeiterator.h:462
TreeIterator & operator--()
Definition bslstl_treeiterator.h:415
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1762
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
Definition bdlb_printmethods.h:283
Definition bdlc_flathashmap.h:1805
Definition bslstl_algorithm.h:82
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:525
Definition bslmf_isconvertible.h:867
Definition bslmf_istriviallycopyable.h:329
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:126
static const RbTreeNode * previous(const RbTreeNode *node)
static const RbTreeNode * next(const RbTreeNode *node)
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:305