• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/arm-linux/include/c++/4.5.3/ext/pb_ds/detail/basic_tree_policy/
1// -*- C++ -*-
2
3// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the terms
7// of the GNU General Public License as published by the Free Software
8// Foundation; either version 3, or (at your option) any later
9// version.
10
11// This library is distributed in the hope that it will be useful, but
12// WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14// General Public License for more details.
15
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23// <http://www.gnu.org/licenses/>.
24
25// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
26
27// Permission to use, copy, modify, sell, and distribute this software
28// is hereby granted without fee, provided that the above copyright
29// notice appears in all copies, and that both that copyright notice
30// and this permission notice appear in supporting documentation. None
31// of the above authors, nor IBM Haifa Research Laboratories, make any
32// representation about the suitability of this software for any
33// purpose. It is provided "as is" without express or implied
34// warranty.
35
36/**
37 * @file basic_tree_policy_base.hpp
38 * Contains a base class for tree_like policies.
39 */
40
41#ifndef PB_DS_TREE_LIKE_POLICY_BASE_HPP
42#define PB_DS_TREE_LIKE_POLICY_BASE_HPP
43
44namespace __gnu_pbds
45{
46  namespace detail
47  {
48
49#define PB_DS_CLASS_C_DEC						\
50    basic_tree_policy_base<						\
51							Const_Node_Iterator, \
52							Node_Iterator,	\
53							Allocator>
54
55    template<typename Const_Node_Iterator,
56	     typename Node_Iterator,
57	     typename Allocator>
58    struct basic_tree_policy_base
59    {
60    protected:
61      typedef typename Node_Iterator::value_type it_type;
62
63      typedef typename std::iterator_traits< it_type>::value_type value_type;
64
65      typedef typename value_type::first_type key_type;
66
67      typedef
68      typename Allocator::template rebind<
69	typename remove_const<
70	key_type>::type>::other::const_reference
71      const_key_reference;
72
73      typedef
74      typename Allocator::template rebind<
75	typename remove_const<
76	value_type>::type>::other::const_reference
77      const_reference;
78
79      typedef
80      typename Allocator::template rebind<
81	typename remove_const<
82	value_type>::type>::other::reference
83      reference;
84
85      typedef
86      typename Allocator::template rebind<
87	typename remove_const<
88	value_type>::type>::other::const_pointer
89      const_pointer;
90
91      static inline const_key_reference
92      extract_key(const_reference r_val)
93      {
94	return (r_val.first);
95      }
96
97      virtual it_type
98      end() = 0;
99
100      it_type
101      end_iterator() const
102      {
103	return (const_cast<PB_DS_CLASS_C_DEC* >(this)->end());
104      }
105
106      virtual
107      ~basic_tree_policy_base()
108      { }
109    };
110
111    template<typename Const_Node_Iterator, typename Allocator>
112    struct basic_tree_policy_base<
113      Const_Node_Iterator,
114      Const_Node_Iterator,
115      Allocator>
116    {
117    protected:
118      typedef typename Const_Node_Iterator::value_type it_type;
119
120      typedef typename std::iterator_traits< it_type>::value_type value_type;
121
122      typedef value_type key_type;
123
124      typedef
125      typename Allocator::template rebind<
126	typename remove_const<
127	key_type>::type>::other::const_reference
128      const_key_reference;
129
130      typedef
131      typename Allocator::template rebind<
132	typename remove_const<
133	value_type>::type>::other::const_reference
134      const_reference;
135
136      typedef
137      typename Allocator::template rebind<
138	typename remove_const<
139	value_type>::type>::other::reference
140      reference;
141
142      typedef
143      typename Allocator::template rebind<
144	typename remove_const<
145	value_type>::type>::other::const_pointer
146      const_pointer;
147
148      static inline const_key_reference
149      extract_key(const_reference r_val)
150      {
151	return (r_val);
152      }
153
154      virtual it_type
155      end() const = 0;
156
157      it_type
158      end_iterator() const
159      {
160	return (end());
161      }
162
163      virtual
164      ~basic_tree_policy_base()
165      { }
166    };
167
168#undef PB_DS_CLASS_C_DEC
169
170  } // namespace detail
171} // namespace __gnu_pbds
172
173#endif // #ifndef PB_DS_TREE_LIKE_POLICY_BASE_HPP
174