diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1997-09-10 02:49:45 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1997-09-09 22:49:45 -0400 |
commit | ff893307d082263698dc79b955cb72cca949dd64 (patch) | |
tree | 6fbaaedc3231eb90bf4d0271528c64368c08b5a7 /libstdc++/stl/tree.h | |
parent | c6b50f1082077ca8013ed0cc514fd7de7e2f4aaa (diff) | |
download | gcc-ff893307d082263698dc79b955cb72cca949dd64.zip gcc-ff893307d082263698dc79b955cb72cca949dd64.tar.gz gcc-ff893307d082263698dc79b955cb72cca949dd64.tar.bz2 |
algo.h, [...]: Update To September 8 SGI release.
* algo.h, algobase.h, alloc.h, bvector.h, deque.h, hashtable.h,
iterator.h, list.h, rope.h, ropeimpl.h, slist.h, stl_config.h,
tree.h, vector.h: Update To September 8 SGI release.
From-SVN: r15211
Diffstat (limited to 'libstdc++/stl/tree.h')
-rw-r--r-- | libstdc++/stl/tree.h | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/libstdc++/stl/tree.h b/libstdc++/stl/tree.h index 0429c1a..b55f0c5 100644 --- a/libstdc++/stl/tree.h +++ b/libstdc++/stl/tree.h @@ -137,23 +137,25 @@ struct __rb_tree_base_iterator } }; -template <class Value, class Ref> +template <class Value, class Ref, class Ptr> struct __rb_tree_iterator : public __rb_tree_base_iterator { typedef Value value_type; typedef Value& reference; - typedef const Value& const_reference; typedef Value* pointer; - typedef __rb_tree_iterator<Value, reference> iterator; - typedef __rb_tree_iterator<Value, const_reference> const_iterator; - typedef __rb_tree_iterator<Value, Ref> self; + typedef __rb_tree_iterator<Value, Value&, Value*> iterator; + typedef __rb_tree_iterator<Value, const Value&, const Value*> const_iterator; + typedef __rb_tree_iterator<Value, Ref, Ptr> self; typedef __rb_tree_node<Value>* link_type; __rb_tree_iterator() {} __rb_tree_iterator(link_type x) { node = x; } __rb_tree_iterator(const iterator& it) { node = it.node; } - Ref operator*() const { return link_type(node)->value_field; } + reference operator*() const { return link_type(node)->value_field; } +#ifndef __SGI_STL_NO_ARROW_OPERATOR + pointer operator->() const { return &(operator*()); } +#endif /* __SGI_STL_NO_ARROW_OPERATOR */ self& operator++() { increment(); return *this; } self operator++(int) { @@ -180,6 +182,8 @@ inline bool operator!=(const __rb_tree_base_iterator& x, return x.node != y.node; } +#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION + inline bidirectional_iterator_tag iterator_category(const __rb_tree_base_iterator&) { return bidirectional_iterator_tag(); @@ -190,11 +194,13 @@ distance_type(const __rb_tree_base_iterator&) { return (__rb_tree_base_iterator::difference_type*) 0; } -template <class Value, class Ref> -inline Value* value_type(const __rb_tree_iterator<Value, Ref>&) { +template <class Value, class Ref, class Ptr> +inline Value* value_type(const __rb_tree_iterator<Value, Ref, Ptr>&) { return (Value*) 0; } +#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */ + inline void __rb_tree_rotate_left(__rb_tree_node_base* x, __rb_tree_node_base*& root) { @@ -487,15 +493,21 @@ protected: } public: - typedef __rb_tree_iterator<value_type, reference> iterator; - typedef __rb_tree_iterator<value_type, const_reference> const_iterator; - + typedef __rb_tree_iterator<value_type, reference, pointer> iterator; + typedef __rb_tree_iterator<value_type, const_reference, const_pointer> + const_iterator; + +#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION + typedef reverse_iterator<const_iterator> const_reverse_iterator; + typedef reverse_iterator<iterator> reverse_iterator; +#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */ typedef reverse_bidirectional_iterator<iterator, value_type, reference, difference_type> reverse_iterator; typedef reverse_bidirectional_iterator<const_iterator, value_type, const_reference, difference_type> const_reverse_iterator; +#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */ private: iterator __insert(base_ptr x, base_ptr y, const value_type& v); link_type __copy(link_type x, link_type p); |