re PR c++/24163 (dependent Base class scope examined during unqualified name lookup...
[gcc.git] / libstdc++-v3 / include / ext / pb_ds / detail / splay_tree_ / erase_fn_imps.hpp
index 272bd365bec39292805fd634a65118a47be163ee..22f8e68c44028d7b7097eb207b1208a4e22355fd 100644 (file)
@@ -1,11 +1,11 @@
 // -*- C++ -*-
 
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the terms
 // of the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later
+// Foundation; either version 3, or (at your option) any later
 // version.
 
 // This library is distributed in the hope that it will be useful, but
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // General Public License for more details.
 
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING.  If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-// MA 02111-1307, USA.
-
-// As a special exception, you may use this file as part of a free
-// software library without restriction.  Specifically, if other files
-// instantiate templates or use macros or inline functions from this
-// file, or you compile this file and link it with other files to
-// produce an executable, this file does not by itself cause the
-// resulting executable to be covered by the GNU General Public
-// License.  This exception does not however invalidate any other
-// reasons why the executable file might be covered by the GNU General
-// Public License.
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
 
 // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
 
@@ -50,13 +44,10 @@ PB_DS_CLASS_C_DEC::
 erase(const_key_reference r_key)
 {
   point_iterator it = find(r_key);
-
-  if (it == PB_DS_BASE_C_DEC::end())
-    return (false);
-
+  if (it == base_type::end())
+    return false;
   erase(it);
-
-  return (true);
+  return true;
 }
 
 PB_DS_CLASS_T_DEC
@@ -64,20 +55,14 @@ inline typename PB_DS_CLASS_C_DEC::iterator
 PB_DS_CLASS_C_DEC::
 erase(iterator it)
 {
-  _GLIBCXX_DEBUG_ONLY(assert_valid());
-
-  if (it == PB_DS_BASE_C_DEC::end())
-    return (it);
-
+  PB_DS_ASSERT_VALID((*this))
+  if (it == base_type::end())
+    return it;
   iterator ret_it = it;
-
   ++ret_it;
-
   erase_node(it.m_p_nd);
-
-  _GLIBCXX_DEBUG_ONLY(assert_valid());
-
-  return (ret_it);
+  PB_DS_ASSERT_VALID((*this))
+  return ret_it;
 }
 
 PB_DS_CLASS_T_DEC
@@ -85,20 +70,14 @@ inline typename PB_DS_CLASS_C_DEC::reverse_iterator
 PB_DS_CLASS_C_DEC::
 erase(reverse_iterator it)
 {
-  _GLIBCXX_DEBUG_ONLY(assert_valid());
-
-  if (it.m_p_nd == PB_DS_BASE_C_DEC::m_p_head)
+  PB_DS_ASSERT_VALID((*this))
+  if (it.m_p_nd == base_type::m_p_head)
     return (it);
-
   reverse_iterator ret_it = it;
-
   ++ret_it;
-
   erase_node(it.m_p_nd);
-
-  _GLIBCXX_DEBUG_ONLY(assert_valid());
-
-  return (ret_it);
+  PB_DS_ASSERT_VALID((*this))
+  return ret_it;
 }
 
 PB_DS_CLASS_T_DEC
@@ -107,27 +86,21 @@ inline typename PB_DS_CLASS_C_DEC::size_type
 PB_DS_CLASS_C_DEC::
 erase_if(Pred pred)
 {
-  _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
-    size_type num_ersd = 0;
-
-  iterator it = PB_DS_BASE_C_DEC::begin();
-
-  while (it != PB_DS_BASE_C_DEC::end())
+  PB_DS_ASSERT_VALID((*this))
+  size_type num_ersd = 0;
+  iterator it = base_type::begin();
+  while (it != base_type::end())
     {
       if (pred(*it))
         {
          ++num_ersd;
-
          it = erase(it);
         }
       else
        ++it;
     }
-
-  _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
-    return (num_ersd);
+  PB_DS_ASSERT_VALID((*this))
+  return num_ersd;
 }
 
 PB_DS_CLASS_T_DEC
@@ -135,57 +108,41 @@ void
 PB_DS_CLASS_C_DEC::
 erase_node(node_pointer p_nd)
 {
-  _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
-
+  _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
   splay(p_nd);
 
-  _GLIBCXX_DEBUG_ONLY(assert_valid();)
-    _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent);
+  PB_DS_ASSERT_VALID((*this))
+  _GLIBCXX_DEBUG_ASSERT(p_nd == this->m_p_head->m_p_parent);
 
   node_pointer p_l = p_nd->m_p_left;
   node_pointer p_r = p_nd->m_p_right;
 
-  PB_DS_BASE_C_DEC::update_min_max_for_erased_node(p_nd);
-
-  PB_DS_BASE_C_DEC::actual_erase_node(p_nd);
-
-  if (p_r == NULL)
+  base_type::update_min_max_for_erased_node(p_nd);
+  base_type::actual_erase_node(p_nd);
+  if (p_r == 0)
     {
-      PB_DS_BASE_C_DEC::m_p_head->m_p_parent = p_l;
-
-      if (p_l != NULL)
-       p_l->m_p_parent = PB_DS_BASE_C_DEC::m_p_head;
-
-      _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
-        return;
+      base_type::m_p_head->m_p_parent = p_l;
+      if (p_l != 0)
+       p_l->m_p_parent = base_type::m_p_head;
+      PB_DS_ASSERT_VALID((*this))
+      return;
     }
 
   node_pointer p_target_r = leftmost(p_r);
-
-  _GLIBCXX_DEBUG_ASSERT(p_target_r != NULL);
-
-  p_r->m_p_parent = PB_DS_BASE_C_DEC::m_p_head;
-
-  PB_DS_BASE_C_DEC::m_p_head->m_p_parent = p_r;
-
+  _GLIBCXX_DEBUG_ASSERT(p_target_r != 0);
+  p_r->m_p_parent = base_type::m_p_head;
+  base_type::m_p_head->m_p_parent = p_r;
   splay(p_target_r);
 
-  _GLIBCXX_DEBUG_ONLY(p_target_r->m_p_left = NULL);
-
+  _GLIBCXX_DEBUG_ONLY(p_target_r->m_p_left = 0);
   _GLIBCXX_DEBUG_ASSERT(p_target_r->m_p_parent == this->m_p_head);
-
-  _GLIBCXX_DEBUG_ASSERT(this->m_p_head->m_p_parent ==
-                  p_target_r);
+  _GLIBCXX_DEBUG_ASSERT(this->m_p_head->m_p_parent == p_target_r);
 
   p_target_r->m_p_left = p_l;
-
-  if (p_l != NULL)
+  if (p_l != 0)
     p_l->m_p_parent = p_target_r;
-
-  _GLIBCXX_DEBUG_ONLY(assert_valid();)
-
-    apply_update(p_target_r, (node_update* )this);
+  PB_DS_ASSERT_VALID((*this))
+  this->apply_update(p_target_r, (node_update* )this);
 }
 
 PB_DS_CLASS_T_DEC
@@ -193,10 +150,8 @@ inline typename PB_DS_CLASS_C_DEC::node_pointer
 PB_DS_CLASS_C_DEC::
 leftmost(node_pointer p_nd)
 {
-  _GLIBCXX_DEBUG_ASSERT(p_nd != NULL);
-
-  while (p_nd->m_p_left != NULL)
+  _GLIBCXX_DEBUG_ASSERT(p_nd != 0);
+  while (p_nd->m_p_left != 0)
     p_nd = p_nd->m_p_left;
-
-  return (p_nd);
+  return p_nd;
 }