00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00045 PB_ASSOC_CLASS_T_DEC
00046 inline void
00047 PB_ASSOC_CLASS_C_DEC::
00048 erase_entry_pointer(entry_pointer& r_p_e)
00049 {
00050 PB_ASSOC_DBG_ONLY(my_map_debug_base::erase_existing(r_p_e->m_value.first));
00051
00052 entry_pointer p_e = r_p_e;
00053
00054 r_p_e = r_p_e->m_p_next;
00055
00056 rels_entry(p_e);
00057
00058 PB_ASSOC_DBG_ASSERT(m_num_used_e > 0);
00059 my_resize_base::notify_erased(--m_num_used_e);
00060 }
00061
00062 PB_ASSOC_CLASS_T_DEC
00063 template<class Pred>
00064 inline typename PB_ASSOC_CLASS_C_DEC::size_type
00065 PB_ASSOC_CLASS_C_DEC::
00066 erase_if(Pred& r_pred)
00067 {
00068 size_type num_num_ersd = 0;
00069
00070 for (size_type pos = 0; pos < m_num_e_p; ++pos)
00071 {
00072 size_t num_ersd = 0;
00073
00074 if (m_a_p_entries[pos] != NULL&&
00075 r_pred(m_a_p_entries[pos]->m_value))
00076 {
00077 ++num_ersd;
00078
00079 erase_entry_pointer(m_a_p_entries[pos]);
00080 }
00081
00082 entry_pointer p_e = m_a_p_entries[pos];
00083
00084 while (p_e != NULL&& p_e->m_p_next != NULL)
00085 if (r_pred(p_e->m_p_next->m_value))
00086 {
00087 ++num_num_ersd;
00088
00089 erase_entry_pointer(p_e->m_p_next);
00090 }
00091 }
00092
00093 do_resize_if_needed_no_throw();
00094
00095 return (num_num_ersd);
00096 }
00097
00098 PB_ASSOC_CLASS_T_DEC
00099 void
00100 PB_ASSOC_CLASS_C_DEC::
00101 clear()
00102 {
00103 for (size_type pos = 0; pos < m_num_e_p; ++pos)
00104 while (m_a_p_entries[pos] != NULL)
00105 erase_entry_pointer(m_a_p_entries[pos]);
00106
00107 do_resize_if_needed_no_throw();
00108
00109 my_resize_base::notify_cleared();
00110 }
00111
00112 #include <ext/pb_assoc/detail/cc_ht_map_/erase_no_store_hash_fn_imps.hpp>
00113 #include <ext/pb_assoc/detail/cc_ht_map_/erase_store_hash_fn_imps.hpp>
00114