46   PB_DS_ASSERT_VALID_COND((*
this),
true)
 
   47   _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
 
   52   _GLIBCXX_DEBUG_ASSERT(m_p_max != 0);
 
   53   node_pointer p_nd = m_p_max;
 
   54   remove_parentless_node(m_p_max);
 
   55   base_type::actual_erase_node(p_nd);
 
   57   PB_DS_ASSERT_VALID_COND((*this),true)
 
   63 remove_parentless_node(node_pointer p_nd)
 
   65   _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
 
   66   _GLIBCXX_DEBUG_ASSERT(base_type::parent(p_nd) == 0);
 
   68   node_pointer p_cur_root = p_nd == base_type::m_p_root?
 
   69     p_nd->m_p_next_sibling : base_type::m_p_root;
 
   72     p_cur_root->m_p_prev_or_parent = 0;
 
   74   if (p_nd->m_p_prev_or_parent != 0)
 
   75     p_nd->m_p_prev_or_parent->m_p_next_sibling = p_nd->m_p_next_sibling;
 
   77   if (p_nd->m_p_next_sibling != 0)
 
   78     p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
 
   80   node_pointer p_child = p_nd->m_p_l_child;
 
   83       p_child->m_p_prev_or_parent = 0;
 
   84       while (p_child->m_p_next_sibling != 0)
 
   85     p_child = p_child->m_p_next_sibling;
 
   89   base_type::m_p_root = join(p_cur_root, p_child);
 
  104 erase(point_iterator it)
 
  106   PB_DS_ASSERT_VALID_COND((*
this),
true)
 
  107   _GLIBCXX_DEBUG_ASSERT(!base_type::empty());
 
  109   base_type::bubble_to_top(it.m_p_nd);
 
  110   remove_parentless_node(it.m_p_nd);
 
  111   base_type::actual_erase_node(it.m_p_nd);
 
  113   PB_DS_ASSERT_VALID_COND((*this),true)
 
  117 template<typename Pred>
 
  118 typename PB_DS_CLASS_C_DEC::size_type
 
  122   PB_DS_ASSERT_VALID_COND((*
this),
true)
 
  124   if (base_type::empty())
 
  126       PB_DS_ASSERT_VALID_COND((*
this),
true)
 
  130   base_type::to_linked_list();
 
  131   node_pointer p_out = base_type::prune(pred);
 
  136       node_pointer p_next = p_out->m_p_next_sibling;
 
  137       base_type::actual_erase_node(p_out);
 
  141   node_pointer p_cur = base_type::m_p_root;
 
  142   base_type::m_p_root = 0;
 
  145       node_pointer p_next = p_cur->m_p_next_sibling;
 
  146       p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
 
  147       p_cur->m_metadata = 0;
 
  148       p_cur->m_p_next_sibling = base_type::m_p_root;
 
  150       if (base_type::m_p_root != 0)
 
  151     base_type::m_p_root->m_p_prev_or_parent = p_cur;
 
  153       base_type::m_p_root = p_cur;
 
  154       base_type::m_p_root = fix(base_type::m_p_root);
 
  159   PB_DS_ASSERT_VALID_COND((*
this),
true)