aboutsummaryrefslogtreecommitdiff
path: root/libstdc++/stl/tree.h
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-09-10 02:49:45 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-09-09 22:49:45 -0400
commitff893307d082263698dc79b955cb72cca949dd64 (patch)
tree6fbaaedc3231eb90bf4d0271528c64368c08b5a7 /libstdc++/stl/tree.h
parentc6b50f1082077ca8013ed0cc514fd7de7e2f4aaa (diff)
downloadgcc-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.h34
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);