debug.h (_GLIBCXX_DEBUG_ONLY): New.
[gcc.git] / libstdc++-v3 / include / ext / pb_ds / detail / binary_heap_ / const_point_iterator.hpp
1 // -*- C++ -*-
2
3 // Copyright (C) 2005, 2006 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 2, 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 // You should have received a copy of the GNU General Public License
17 // along with this library; see the file COPYING. If not, write to
18 // the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
19 // MA 02111-1307, USA.
20
21 // As a special exception, you may use this file as part of a free
22 // software library without restriction. Specifically, if other files
23 // instantiate templates or use macros or inline functions from this
24 // file, or you compile this file and link it with other files to
25 // produce an executable, this file does not by itself cause the
26 // resulting executable to be covered by the GNU General Public
27 // License. This exception does not however invalidate any other
28 // reasons why the executable file might be covered by the GNU General
29 // Public License.
30
31 // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
32
33 // Permission to use, copy, modify, sell, and distribute this software
34 // is hereby granted without fee, provided that the above copyright
35 // notice appears in all copies, and that both that copyright notice
36 // and this permission notice appear in supporting documentation. None
37 // of the above authors, nor IBM Haifa Research Laboratories, make any
38 // representation about the suitability of this software for any
39 // purpose. It is provided "as is" without express or implied
40 // warranty.
41
42 /**
43 * @file const_point_iterator.hpp
44 * Contains an iterator class returned by the table's const find and insert
45 * methods.
46 */
47
48 #ifndef PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
49 #define PB_DS_BINARY_HEAP_CONST_FIND_ITERATOR_HPP
50
51 #include <ext/pb_ds/tag_and_trait.hpp>
52 #include <debug/debug.h>
53
54 namespace pb_ds
55 {
56 namespace detail
57 {
58
59 #define PB_DS_CLASS_T_DEC \
60 template<typename Value_Type, typename Entry, bool Simple, class Allocator>
61
62 #define PB_DS_CLASS_C_DEC \
63 binary_heap_const_point_iterator_<Value_Type, Entry, Simple, Allocator>
64
65 // Const point-type iterator.
66 template<typename Value_Type,
67 typename Entry,
68 bool Simple,
69 class Allocator>
70 class binary_heap_const_point_iterator_
71 {
72
73 protected:
74 typedef
75 typename Allocator::template rebind<
76 Entry>::other::pointer
77 entry_pointer;
78
79 public:
80
81 // Category.
82 typedef trivial_iterator_tag iterator_category;
83
84 // Difference type.
85 typedef trivial_iterator_difference_type difference_type;
86
87 // Iterator's value type.
88 typedef Value_Type value_type;
89
90 // Iterator's pointer type.
91 typedef
92 typename Allocator::template rebind<
93 value_type>::other::pointer
94 pointer;
95
96 // Iterator's const pointer type.
97 typedef
98 typename Allocator::template rebind<
99 value_type>::other::const_pointer
100 const_pointer;
101
102 // Iterator's reference type.
103 typedef
104 typename Allocator::template rebind<
105 value_type>::other::reference
106 reference;
107
108 // Iterator's const reference type.
109 typedef
110 typename Allocator::template rebind<
111 value_type>::other::const_reference
112 const_reference;
113
114 public:
115
116 inline
117 binary_heap_const_point_iterator_(entry_pointer p_e) : m_p_e(p_e)
118 { }
119
120 // Default constructor.
121 inline
122 binary_heap_const_point_iterator_() : m_p_e(NULL) { }
123
124 // Copy constructor.
125 inline
126 binary_heap_const_point_iterator_(const PB_DS_CLASS_C_DEC& other)
127 : m_p_e(other.m_p_e)
128 { }
129
130 // Access.
131 inline const_pointer
132 operator->() const
133 {
134 _GLIBCXX_DEBUG_ASSERT(m_p_e != NULL);
135 return to_ptr(integral_constant<int,Simple>());
136 }
137
138 // Access.
139 inline const_reference
140 operator*() const
141 {
142 _GLIBCXX_DEBUG_ASSERT(m_p_e != NULL);
143 return *to_ptr(integral_constant<int,Simple>());
144 }
145
146 // Compares content to a different iterator object.
147 inline bool
148 operator==(const PB_DS_CLASS_C_DEC& other) const
149 { return m_p_e == other.m_p_e; }
150
151 // Compares content (negatively) to a different iterator object.
152 inline bool
153 operator!=(const PB_DS_CLASS_C_DEC& other) const
154 { return m_p_e != other.m_p_e; }
155
156 private:
157 inline const_pointer
158 to_ptr(true_type) const
159 { return m_p_e; }
160
161 inline const_pointer
162 to_ptr(false_type) const
163 { return *m_p_e; }
164
165 public:
166 entry_pointer m_p_e;
167 };
168
169 #undef PB_DS_CLASS_T_DEC
170 #undef PB_DS_CLASS_C_DEC
171
172 } // namespace detail
173 } // namespace pb_ds
174
175 #endif