]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
re PR libstdc++/37144 (A bug in include/ext/pb_ds/detail/pat_trie_/constructors_destr...
[thirdparty/gcc.git] / libstdc++-v3 / include / ext / pb_ds / detail / cond_dealtor.hpp
index 1ee48a2ac666d7c0bbab7109641a6b7426cb4c14..eb87bea9e24810341968d941fd966229b3cf14de 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*-
 
-// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2009, 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
@@ -34,7 +34,7 @@
 // warranty.
 
 /**
- * @file cond_dealtor.hpp
+ * @file detail/cond_dealtor.hpp
  * Contains a conditional deallocator.
  */
 
 
 namespace __gnu_pbds
 {
-
   namespace detail
   {
-
-#define PB_DS_COND_DEALTOR_CLASS_T_DEC         \
-    template<typename Entry, class Allocator>
-
-#define PB_DS_COND_DEALTOR_CLASS_C_DEC                         \
-    cond_dealtor<                                              \
-                                               Entry,          \
-                                               Allocator>
-
-    template<typename Entry, class Allocator>
-    class cond_dealtor
-    {
-    public:
-      typedef
-      typename Allocator::template rebind<Entry>::other
-      entry_allocator;
-
-      typedef typename entry_allocator::pointer entry_pointer;
-
-    public:
-      inline
-      cond_dealtor(entry_pointer p_e);
-
-      inline
-      ~cond_dealtor();
-
-      inline void
-      set_no_action();
-
-    private:
-      entry_pointer m_p_e;
-
-      bool m_no_action_destructor;
-
-      static entry_allocator s_alloc;
-    };
-
-    PB_DS_COND_DEALTOR_CLASS_T_DEC
-    typename PB_DS_COND_DEALTOR_CLASS_C_DEC::entry_allocator
-    PB_DS_COND_DEALTOR_CLASS_C_DEC::s_alloc;
-
-    PB_DS_COND_DEALTOR_CLASS_T_DEC
-    inline
-    PB_DS_COND_DEALTOR_CLASS_C_DEC::
-    cond_dealtor(entry_pointer p_e) :
-      m_p_e(p_e),
-      m_no_action_destructor(false)
-    { }
-
-    PB_DS_COND_DEALTOR_CLASS_T_DEC
-    inline void
-    PB_DS_COND_DEALTOR_CLASS_C_DEC::
-    set_no_action()
-    {
-      m_no_action_destructor = true;
-    }
-
-    PB_DS_COND_DEALTOR_CLASS_T_DEC
-    inline
-    PB_DS_COND_DEALTOR_CLASS_C_DEC::
-    ~cond_dealtor()
-    {
-      if (m_no_action_destructor)
-        return;
-
-      s_alloc.deallocate(m_p_e, 1);
-    }
-
-#undef PB_DS_COND_DEALTOR_CLASS_T_DEC
-#undef PB_DS_COND_DEALTOR_CLASS_C_DEC
-
+    /// Conditional deallocate constructor argument.
+    template<typename Entry, typename _Alloc>
+      class cond_dealtor
+      {
+       typedef typename _Alloc::template rebind<Entry> __rebind_e;
+
+      public:
+       typedef typename __rebind_e::other              entry_allocator;
+       typedef typename entry_allocator::pointer       entry_pointer;
+
+       cond_dealtor(entry_pointer p_e)
+       : m_p_e(p_e), m_no_action_destructor(false) { }
+
+       ~cond_dealtor()
+       {
+         if (m_no_action_destructor)
+           return;
+         s_alloc.deallocate(m_p_e, 1);
+       }
+
+       void
+       set_no_action()
+       { m_no_action_destructor = true; }
+
+      private:
+       entry_pointer           m_p_e;
+       bool                    m_no_action_destructor;
+       static entry_allocator  s_alloc;
+      };
+
+    template<typename Entry, class _Alloc>
+      typename cond_dealtor<Entry, _Alloc>::entry_allocator
+      cond_dealtor<Entry, _Alloc>::s_alloc;
   } // namespace detail
-
 } // namespace __gnu_pbds
 
 #endif // #ifndef PB_DS_COND_DEALTOR_HPP
-