OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [ext/] [pb_ds/] [detail/] [resize_policy/] [hash_standard_resize_policy_imp.hpp] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// -*- C++ -*-
2
 
3
// Copyright (C) 2005, 2006, 2007, 2008, 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 hash_standard_resize_policy_imp.hpp
38
 * Contains a resize policy implementation.
39
 */
40
 
41
PB_DS_CLASS_T_DEC
42
PB_DS_CLASS_C_DEC::
43
hash_standard_resize_policy()
44
: m_size(Size_Policy::get_nearest_larger_size(1))
45
{ trigger_policy_base::notify_externally_resized(m_size); }
46
 
47
PB_DS_CLASS_T_DEC
48
PB_DS_CLASS_C_DEC::
49
hash_standard_resize_policy(const Size_Policy& r_size_policy)
50
: Size_Policy(r_size_policy), m_size(Size_Policy::get_nearest_larger_size(1))
51
{ trigger_policy_base::notify_externally_resized(m_size); }
52
 
53
PB_DS_CLASS_T_DEC
54
PB_DS_CLASS_C_DEC::
55
hash_standard_resize_policy(const Size_Policy& r_size_policy,
56
                            const Trigger_Policy& r_trigger_policy)
57
: Size_Policy(r_size_policy), Trigger_Policy(r_trigger_policy),
58
  m_size(Size_Policy::get_nearest_larger_size(1))
59
{ trigger_policy_base::notify_externally_resized(m_size); }
60
 
61
PB_DS_CLASS_T_DEC
62
PB_DS_CLASS_C_DEC::
63
~hash_standard_resize_policy()
64
{ }
65
 
66
PB_DS_CLASS_T_DEC
67
void
68
PB_DS_CLASS_C_DEC::
69
swap(PB_DS_CLASS_C_DEC& other)
70
{
71
  trigger_policy_base::swap(other);
72
  size_policy_base::swap(other);
73
  std::swap(m_size, other.m_size);
74
}
75
 
76
PB_DS_CLASS_T_DEC
77
inline void
78
PB_DS_CLASS_C_DEC::
79
notify_find_search_start()
80
{ trigger_policy_base::notify_find_search_start(); }
81
 
82
PB_DS_CLASS_T_DEC
83
inline void
84
PB_DS_CLASS_C_DEC::
85
notify_find_search_collision()
86
{ trigger_policy_base::notify_find_search_collision(); }
87
 
88
PB_DS_CLASS_T_DEC
89
inline void
90
PB_DS_CLASS_C_DEC::
91
notify_find_search_end()
92
{ trigger_policy_base::notify_find_search_end(); }
93
 
94
PB_DS_CLASS_T_DEC
95
inline void
96
PB_DS_CLASS_C_DEC::
97
notify_insert_search_start()
98
{ trigger_policy_base::notify_insert_search_start(); }
99
 
100
PB_DS_CLASS_T_DEC
101
inline void
102
PB_DS_CLASS_C_DEC::
103
notify_insert_search_collision()
104
{ trigger_policy_base::notify_insert_search_collision(); }
105
 
106
PB_DS_CLASS_T_DEC
107
inline void
108
PB_DS_CLASS_C_DEC::
109
notify_insert_search_end()
110
{ trigger_policy_base::notify_insert_search_end(); }
111
 
112
PB_DS_CLASS_T_DEC
113
inline void
114
PB_DS_CLASS_C_DEC::
115
notify_erase_search_start()
116
{ trigger_policy_base::notify_erase_search_start(); }
117
 
118
PB_DS_CLASS_T_DEC
119
inline void
120
PB_DS_CLASS_C_DEC::
121
notify_erase_search_collision()
122
{ trigger_policy_base::notify_erase_search_collision(); }
123
 
124
PB_DS_CLASS_T_DEC
125
inline void
126
PB_DS_CLASS_C_DEC::
127
notify_erase_search_end()
128
{ trigger_policy_base::notify_erase_search_end(); }
129
 
130
PB_DS_CLASS_T_DEC
131
inline void
132
PB_DS_CLASS_C_DEC::
133
notify_inserted(size_type num_e)
134
{ trigger_policy_base::notify_inserted(num_e); }
135
 
136
PB_DS_CLASS_T_DEC
137
inline void
138
PB_DS_CLASS_C_DEC::
139
notify_erased(size_type num_e)
140
{ trigger_policy_base::notify_erased(num_e); }
141
 
142
PB_DS_CLASS_T_DEC
143
void
144
PB_DS_CLASS_C_DEC::
145
notify_cleared()
146
{ trigger_policy_base::notify_cleared(); }
147
 
148
PB_DS_CLASS_T_DEC
149
inline bool
150
PB_DS_CLASS_C_DEC::
151
is_resize_needed() const
152
{ return trigger_policy_base::is_resize_needed(); }
153
 
154
PB_DS_CLASS_T_DEC
155
typename PB_DS_CLASS_C_DEC::size_type
156
PB_DS_CLASS_C_DEC::
157
get_new_size(size_type size, size_type num_used_e) const
158
{
159
  if (trigger_policy_base::is_grow_needed(size, num_used_e))
160
    return size_policy_base::get_nearest_larger_size(size);
161
  return size_policy_base::get_nearest_smaller_size(size);
162
}
163
 
164
PB_DS_CLASS_T_DEC
165
void
166
PB_DS_CLASS_C_DEC::
167
notify_resized(size_type new_size)
168
{
169
  trigger_policy_base::notify_resized(new_size);
170
  m_size = new_size;
171
}
172
 
173
PB_DS_CLASS_T_DEC
174
inline typename PB_DS_CLASS_C_DEC::size_type
175
PB_DS_CLASS_C_DEC::
176
get_actual_size() const
177
{
178
  PB_DS_STATIC_ASSERT(access, external_size_access);
179
  return m_size;
180
}
181
 
182
PB_DS_CLASS_T_DEC
183
void
184
PB_DS_CLASS_C_DEC::
185
resize(size_type new_size)
186
{
187
  PB_DS_STATIC_ASSERT(access, external_size_access);
188
  size_type actual_size = size_policy_base::get_nearest_larger_size(1);
189
  while (actual_size < new_size)
190
    {
191
      const size_type pot = size_policy_base::get_nearest_larger_size(actual_size);
192
 
193
      if (pot == actual_size && pot < new_size)
194
        __throw_resize_error();
195
      actual_size = pot;
196
    }
197
 
198
  if (actual_size > 0)
199
    --actual_size;
200
 
201
  const size_type old_size = m_size;
202
  __try
203
    {
204
      do_resize(actual_size - 1);
205
    }
206
  __catch(insert_error& )
207
    {
208
      m_size = old_size;
209
      __throw_resize_error();
210
    }
211
  __catch(...)
212
    {
213
      m_size = old_size;
214
      __throw_exception_again;
215
    }
216
}
217
 
218
PB_DS_CLASS_T_DEC
219
void
220
PB_DS_CLASS_C_DEC::
221
do_resize(size_type)
222
{
223
  // Do nothing
224
}
225
 
226
PB_DS_CLASS_T_DEC
227
Trigger_Policy&
228
PB_DS_CLASS_C_DEC::
229
get_trigger_policy()
230
{ return *this; }
231
 
232
PB_DS_CLASS_T_DEC
233
const Trigger_Policy&
234
PB_DS_CLASS_C_DEC::
235
get_trigger_policy() const
236
{ return *this; }
237
 
238
PB_DS_CLASS_T_DEC
239
Size_Policy&
240
PB_DS_CLASS_C_DEC::
241
get_size_policy()
242
{ return *this; }
243
 
244
PB_DS_CLASS_T_DEC
245
const Size_Policy&
246
PB_DS_CLASS_C_DEC::
247
get_size_policy() const
248
{ return *this; }
249
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.