]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/leaf.hpp
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libstdc++-v3 / include / ext / pb_ds / detail / pat_trie_ / leaf.hpp
CommitLineData
4569a895
AT
1// -*- C++ -*-
2
748086b7 3// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
4569a895
AT
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
748086b7 8// Foundation; either version 3, or (at your option) any later
4569a895
AT
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
748086b7
JJ
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.
4569a895 19
748086b7
JJ
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/>.
4569a895
AT
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 leaf.hpp
38 * Contains a pat_trie_leaf for a patricia tree.
39 */
40
41#ifndef PB_DS_PAT_TRIE_LEAF_HPP
42#define PB_DS_PAT_TRIE_LEAF_HPP
43
47bea7b8
BK
44#include <debug/debug.h>
45
5e11f978 46namespace __gnu_pbds
4569a895
AT
47{
48 namespace detail
49 {
50
51#define PB_DS_CLASS_T_DEC \
52 template< \
53 class Type_Traits, \
54 class E_Access_Traits, \
55 class Metadata, \
56 class Allocator>
57
58#define PB_DS_CLASS_C_DEC \
59 pat_trie_leaf< \
60 Type_Traits, \
61 E_Access_Traits, \
62 Metadata, \
63 Allocator>
64
65#define PB_DS_BASE_C_DEC \
66 pat_trie_node_base< \
67 Type_Traits, \
68 E_Access_Traits, \
69 Metadata, \
70 Allocator>
71
72#define PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC \
73 pat_trie_subtree_debug_info< \
74 Type_Traits, \
75 E_Access_Traits, \
76 Allocator>
77
4569a895
AT
78 template<typename Type_Traits,
79 class E_Access_Traits,
80 class Metadata,
81 class Allocator>
82 struct pat_trie_leaf : public PB_DS_BASE_C_DEC
83 {
84 private:
85 typedef typename Type_Traits::value_type value_type;
86
87 typedef typename Type_Traits::const_reference const_reference;
88
89 typedef typename Type_Traits::reference reference;
90
91 typedef
92 typename Allocator::template rebind<
93 E_Access_Traits>::other::const_pointer
94 const_e_access_traits_pointer;
95
47bea7b8 96#ifdef _GLIBCXX_DEBUG
4569a895
AT
97 typedef
98 typename PB_DS_BASE_C_DEC::subtree_debug_info
99 subtree_debug_info;
47bea7b8 100#endif
4569a895
AT
101
102 typedef PB_DS_BASE_C_DEC base_type;
103
104 public:
105 pat_trie_leaf(const_reference r_val);
106
107 inline reference
108 value();
109
110 inline const_reference
111 value() const;
112
47bea7b8 113#ifdef _GLIBCXX_DEBUG
4569a895
AT
114 virtual subtree_debug_info
115 assert_valid_imp(const_e_access_traits_pointer p_traits) const;
4569a895 116
4569a895
AT
117 virtual
118 ~pat_trie_leaf();
47bea7b8 119#endif
4569a895
AT
120
121 private:
122 pat_trie_leaf(const PB_DS_CLASS_C_DEC& other);
123
4569a895
AT
124 value_type m_value;
125 };
126
127 PB_DS_CLASS_T_DEC
128 PB_DS_CLASS_C_DEC::
129 pat_trie_leaf(const_reference r_val) :
47bea7b8 130 PB_DS_BASE_C_DEC(pat_trie_leaf_node_type), m_value(r_val)
4569a895
AT
131 { }
132
133 PB_DS_CLASS_T_DEC
134 inline typename PB_DS_CLASS_C_DEC::reference
135 PB_DS_CLASS_C_DEC::
136 value()
47bea7b8 137 { return m_value; }
4569a895
AT
138
139 PB_DS_CLASS_T_DEC
140 inline typename PB_DS_CLASS_C_DEC::const_reference
141 PB_DS_CLASS_C_DEC::
142 value() const
47bea7b8 143 { return m_value; }
4569a895 144
47bea7b8 145#ifdef _GLIBCXX_DEBUG
4569a895
AT
146 PB_DS_CLASS_T_DEC
147 typename PB_DS_CLASS_C_DEC::subtree_debug_info
148 PB_DS_CLASS_C_DEC::
149 assert_valid_imp(const_e_access_traits_pointer p_traits) const
150 {
47bea7b8 151 _GLIBCXX_DEBUG_ASSERT(base_type::m_type == pat_trie_leaf_node_type);
4569a895 152 subtree_debug_info ret;
4569a895 153 const_reference r_val = value();
47bea7b8
BK
154 return std::make_pair(p_traits->begin(p_traits->extract_key(r_val)),
155 p_traits->end(p_traits->extract_key(r_val)));
4569a895 156 }
4569a895 157
4569a895
AT
158 PB_DS_CLASS_T_DEC
159 PB_DS_CLASS_C_DEC::
47bea7b8
BK
160 ~pat_trie_leaf() { }
161#endif
4569a895
AT
162
163#undef PB_DS_CLASS_T_DEC
4569a895 164#undef PB_DS_CLASS_C_DEC
4569a895 165#undef PB_DS_BASE_C_DEC
4569a895
AT
166#undef PB_DS_PAT_TRIE_SUBTREE_DEBUG_INFO_C_DEC
167
4569a895 168 } // namespace detail
5e11f978 169} // namespace __gnu_pbds
4569a895 170
47bea7b8 171#endif