44 rotate_left(node_pointer p_x)
 
   46   node_pointer p_y = p_x->m_p_right;
 
   48   p_x->m_p_right = p_y->m_p_left;
 
   50   if (p_y->m_p_left != 0)
 
   51     p_y->m_p_left->m_p_parent = p_x;
 
   53   p_y->m_p_parent = p_x->m_p_parent;
 
   55   if (p_x == m_p_head->m_p_parent)
 
   56     m_p_head->m_p_parent = p_y;
 
   57   else if (p_x == p_x->m_p_parent->m_p_left)
 
   58     p_x->m_p_parent->m_p_left = p_y;
 
   60     p_x->m_p_parent->m_p_right = p_y;
 
   63   p_x->m_p_parent = p_y;
 
   65   PB_DS_ASSERT_NODE_CONSISTENT(p_x)
 
   66   PB_DS_ASSERT_NODE_CONSISTENT(p_y)
 
   68   apply_update(p_x, (node_update* )this);
 
   69   apply_update(p_x->m_p_parent, (node_update* )this);
 
   75 rotate_right(node_pointer p_x)
 
   77   node_pointer p_y = p_x->m_p_left;
 
   79   p_x->m_p_left = p_y->m_p_right;
 
   81   if (p_y->m_p_right != 0)
 
   82     p_y->m_p_right->m_p_parent = p_x;
 
   84   p_y->m_p_parent = p_x->m_p_parent;
 
   86   if (p_x == m_p_head->m_p_parent)
 
   87     m_p_head->m_p_parent = p_y;
 
   88   else if (p_x == p_x->m_p_parent->m_p_right)
 
   89     p_x->m_p_parent->m_p_right = p_y;
 
   91     p_x->m_p_parent->m_p_left = p_y;
 
   94   p_x->m_p_parent = p_y;
 
   96   PB_DS_ASSERT_NODE_CONSISTENT(p_x)
 
   97   PB_DS_ASSERT_NODE_CONSISTENT(p_y)
 
   99   apply_update(p_x, (node_update* )this);
 
  100   apply_update(p_x->m_p_parent, (node_update* )this);
 
  106 rotate_parent(node_pointer p_nd)
 
  108   node_pointer p_parent = p_nd->m_p_parent;
 
  110   if (p_nd == p_parent->m_p_left)
 
  111     rotate_right(p_parent);
 
  113     rotate_left(p_parent);
 
  115   _GLIBCXX_DEBUG_ASSERT(p_parent->m_p_parent = p_nd);
 
  116   _GLIBCXX_DEBUG_ASSERT(p_nd->m_p_left == p_parent ||
 
  117            p_nd->m_p_right == p_parent);
 
  123 apply_update(node_pointer , null_node_update_pointer )
 
  127 template<
typename Node_Update_>
 
  130 apply_update(node_pointer p_nd, Node_Update_*  )
 
  132   node_update::operator()(node_iterator(p_nd),
 
  133               node_const_iterator(static_cast<node_pointer>(0)));
 
  137 template<
typename Node_Update_>
 
  140 update_to_top(node_pointer p_nd, Node_Update_* p_update)
 
  142   while (p_nd != m_p_head)
 
  144       apply_update(p_nd, p_update);
 
  146       p_nd = p_nd->m_p_parent;
 
  153 update_to_top(node_pointer , null_node_update_pointer )