OSDN Git Service

2011-05-23 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / include / ext / pb_ds / detail / debug_map_base.hpp
index a9a0b42..c1709ba 100644 (file)
@@ -35,7 +35,7 @@
 // warranty.
 
 /**
- * @file debug_map_base.hpp
+ * @file detail/debug_map_base.hpp
  * Contains a debug-mode base for all maps.
  */
 
@@ -63,73 +63,69 @@ namespace __gnu_pbds
     { return (__out << '(' << p.first << ',' << p.second << ')'); }
 
 #define PB_DS_CLASS_T_DEC \
-    template<typename Key, class Eq_Fn, typename Const_Key_Reference>
+    template<typename Key, typename Eq_Fn, typename Const_Key_Reference>
 
 #define PB_DS_CLASS_C_DEC \
     debug_map_base<Key, Eq_Fn, Const_Key_Reference>
 
-    template<typename Key, class Eq_Fn, typename Const_Key_Reference>
+    /// Debug base class.
+    template<typename Key, typename Eq_Fn, typename Const_Key_Reference>
     class debug_map_base
     {
     private:
-      typedef typename std::allocator<Key>             key_allocator;
-      typedef typename key_allocator::size_type        size_type;
-      typedef Const_Key_Reference                      const_key_reference;
-      typedef std::_GLIBCXX_STD_C::list<Key>           key_set;
-      typedef typename key_set::iterator               key_set_iterator;
-      typedef typename key_set::const_iterator                 const_key_set_iterator;
-      typedef __gnu_cxx::throw_allocator_random<Key>   key_db_allocator;
-      typedef typename key_db_allocator::never_adjustor        never_adjustor;
+      typedef Const_Key_Reference                      key_const_reference;
+      typedef std::_GLIBCXX_STD_C::list<Key>           key_repository;
+      typedef typename key_repository::size_type               size_type;
+      typedef typename key_repository::iterator                iterator;
+      typedef typename key_repository::const_iterator          const_iterator;
 
     protected:
       debug_map_base();
 
-      debug_map_base(const PB_DS_CLASS_C_DEC& other);
+      debug_map_base(const PB_DS_CLASS_C_DEC&);
 
       ~debug_map_base();
 
       inline void
-      insert_new(const_key_reference r_key);
+      insert_new(key_const_reference);
 
       inline void
-      erase_existing(const_key_reference r_key);
+      erase_existing(key_const_reference);
 
       void
       clear();
 
       inline void
-      check_key_exists(const_key_reference r_key,
-                      const char* file, int line) const;
+      check_key_exists(key_const_reference, const char*, int) const;
 
       inline void
-      check_key_does_not_exist(const_key_reference r_key,
-                              const char* file, int line) const;
+      check_key_does_not_exist(key_const_reference, const char*, int) const;
 
       inline void
-      check_size(size_type size, const char* file, int line) const;
+      check_size(size_type, const char*, int) const;
 
       void
-      swap(PB_DS_CLASS_C_DEC& other);
+      swap(PB_DS_CLASS_C_DEC&);
 
       template<typename Cmp_Fn>
       void
-      split(const_key_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&);
+      split(key_const_reference, Cmp_Fn, PB_DS_CLASS_C_DEC&);
 
       void
-      join(PB_DS_CLASS_C_DEC& other, bool with_cleanup = true);
+      join(PB_DS_CLASS_C_DEC&, bool with_cleanup = true);
 
     private:
       void
-      assert_valid(const char* file, int line) const;
+      assert_valid(const char*, int) const;
 
-      const_key_set_iterator
-      find(const_key_reference r_key) const;
+      const_iterator
+      find(key_const_reference) const;
 
-      key_set_iterator
-      find(const_key_reference r_key);
+      iterator
+      find(key_const_reference);
 
-      key_set  m_key_set;
-      Eq_Fn    m_eq;
+      key_repository   m_keys;
+      Eq_Fn            m_eq;
     };
 
     PB_DS_CLASS_T_DEC
@@ -139,7 +135,8 @@ namespace __gnu_pbds
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    debug_map_base(const PB_DS_CLASS_C_DEC& other) : m_key_set(other.m_key_set)
+    debug_map_base(const PB_DS_CLASS_C_DEC& other)
+    : m_keys(other.m_keys), m_eq(other.m_eq)
     { PB_DS_ASSERT_VALID((*this)) }
 
     PB_DS_CLASS_T_DEC
@@ -150,20 +147,19 @@ namespace __gnu_pbds
     PB_DS_CLASS_T_DEC
     inline void
     PB_DS_CLASS_C_DEC::
-    insert_new(const_key_reference r_key)
+    insert_new(key_const_reference r_key)
     {
       PB_DS_ASSERT_VALID((*this))
 
-      if (find(r_key) != m_key_set.end())
+      if (find(r_key) != m_keys.end())
        {
          std::cerr << "insert_new key already present " << r_key << std::endl;
-         std::abort;
+         std::abort();
        }
 
-      never_adjustor never;
       __try
        {
-         m_key_set.push_back(r_key);
+         m_keys.push_back(r_key);
        }
       __catch(...)
        {
@@ -177,16 +173,16 @@ namespace __gnu_pbds
     PB_DS_CLASS_T_DEC
     inline void
     PB_DS_CLASS_C_DEC::
-    erase_existing(const_key_reference r_key)
+    erase_existing(key_const_reference r_key)
     {
       PB_DS_ASSERT_VALID((*this))
-      key_set_iterator it = find(r_key);
-      if (it == m_key_set.end())
+      iterator it = find(r_key);
+      if (it == m_keys.end())
        {
          std::cerr << "erase_existing" << r_key << std::endl;
          std::abort();
        }
-      m_key_set.erase(it);
+      m_keys.erase(it);
       PB_DS_ASSERT_VALID((*this))
     }
 
@@ -196,18 +192,18 @@ namespace __gnu_pbds
     clear()
     {
       PB_DS_ASSERT_VALID((*this))
-      m_key_set.clear();
+      m_keys.clear();
       PB_DS_ASSERT_VALID((*this))
     }
 
     PB_DS_CLASS_T_DEC
     inline void
     PB_DS_CLASS_C_DEC::
-    check_key_exists(const_key_reference r_key,
+    check_key_exists(key_const_reference r_key,
                     const char* __file, int __line) const
     {
       assert_valid(__file, __line);
-      if (find(r_key) == m_key_set.end())
+      if (find(r_key) == m_keys.end())
        {
          std::cerr << __file << ':' << __line << ": check_key_exists "
                    << r_key << std::endl;
@@ -218,11 +214,11 @@ namespace __gnu_pbds
     PB_DS_CLASS_T_DEC
     inline void
     PB_DS_CLASS_C_DEC::
-    check_key_does_not_exist(const_key_reference r_key,
+    check_key_does_not_exist(key_const_reference r_key,
                             const char* __file, int __line) const
     {
       assert_valid(__file, __line);
-      if (find(r_key) != m_key_set.end())
+      if (find(r_key) != m_keys.end())
        {
          using std::cerr;
          using std::endl;
@@ -238,11 +234,11 @@ namespace __gnu_pbds
     check_size(size_type size, const char* __file, int __line) const
     {
       assert_valid(__file, __line);
-      const size_type key_set_size = m_key_set.size();
-      if (size != key_set_size)
+      const size_type keys_size = m_keys.size();
+      if (size != keys_size)
        {
-         std::cerr << __file << ':' << __line << ": check_size " << size
-                   << " != " << key_set_size << std::endl;
+         std::cerr << __file << ':' << __line << ": check_size "
+                   << size << " != " << keys_size << std::endl;
          std::abort();
        }
      }
@@ -253,31 +249,32 @@ namespace __gnu_pbds
     swap(PB_DS_CLASS_C_DEC& other)
     {
       PB_DS_ASSERT_VALID((*this))
-      m_key_set.swap(other.m_key_set);
+      m_keys.swap(other.m_keys);
+      std::swap(m_eq, other.m_eq);
       PB_DS_ASSERT_VALID((*this))
     }
 
     PB_DS_CLASS_T_DEC
-    typename PB_DS_CLASS_C_DEC::const_key_set_iterator
+    typename PB_DS_CLASS_C_DEC::const_iterator
     PB_DS_CLASS_C_DEC::
-    find(const_key_reference r_key) const
+    find(key_const_reference r_key) const
     {
       PB_DS_ASSERT_VALID((*this))
-      typedef const_key_set_iterator iterator_type;
-      for (iterator_type it = m_key_set.begin(); it != m_key_set.end(); ++it)
+      typedef const_iterator iterator_type;
+      for (iterator_type it = m_keys.begin(); it != m_keys.end(); ++it)
        if (m_eq(*it, r_key))
          return it;
-      return m_key_set.end();
+      return m_keys.end();
     }
 
     PB_DS_CLASS_T_DEC
-    typename PB_DS_CLASS_C_DEC::key_set_iterator
+    typename PB_DS_CLASS_C_DEC::iterator
     PB_DS_CLASS_C_DEC::
-    find(const_key_reference r_key)
+    find(key_const_reference r_key)
     {
       PB_DS_ASSERT_VALID((*this))
-      key_set_iterator it = m_key_set.begin();
-      while (it != m_key_set.end())
+      iterator it = m_keys.begin();
+      while (it != m_keys.end())
        {
          if (m_eq(*it, r_key))
            return it;
@@ -291,12 +288,12 @@ namespace __gnu_pbds
     PB_DS_CLASS_C_DEC::
     assert_valid(const char* __file, int __line) const
     {
-      const_key_set_iterator prime_it = m_key_set.begin();
-      while (prime_it != m_key_set.end())
+      const_iterator prime_it = m_keys.begin();
+      while (prime_it != m_keys.end())
        {
-         const_key_set_iterator sec_it = prime_it;
+         const_iterator sec_it = prime_it;
          ++sec_it;
-         while (sec_it != m_key_set.end())
+         while (sec_it != m_keys.end())
            {
              PB_DS_DEBUG_VERIFY(!m_eq(*sec_it, *prime_it));
              PB_DS_DEBUG_VERIFY(!m_eq(*prime_it, *sec_it));
@@ -310,15 +307,15 @@ namespace __gnu_pbds
     template<typename Cmp_Fn>
     void
     PB_DS_CLASS_C_DEC::
-    split(const_key_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
+    split(key_const_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
     {
       other.clear();
-      key_set_iterator it = m_key_set.begin();
-      while (it != m_key_set.end())
-       if (cmp_fn(r_key, * it))
+      iterator it = m_keys.begin();
+      while (it != m_keys.end())
+       if (cmp_fn(r_key, *it))
          {
            other.insert_new(*it);
-           it = m_key_set.erase(it);
+           it = m_keys.erase(it);
          }
        else
          ++it;
@@ -329,16 +326,16 @@ namespace __gnu_pbds
     PB_DS_CLASS_C_DEC::
     join(PB_DS_CLASS_C_DEC& other, bool with_cleanup)
     {
-      key_set_iterator it = other.m_key_set.begin();
-      while (it != other.m_key_set.end())
+      iterator it = other.m_keys.begin();
+      while (it != other.m_keys.end())
        {
          insert_new(*it);
          if (with_cleanup)
-           it = other.m_key_set.erase(it);
+           it = other.m_keys.erase(it);
          else
            ++it;
        }
-      _GLIBCXX_DEBUG_ASSERT(!with_cleanup || other.m_key_set.empty());
+      _GLIBCXX_DEBUG_ASSERT(!with_cleanup || other.m_keys.empty());
     }
 
 #undef PB_DS_CLASS_T_DEC