This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] template aliases for std::allocator base


Uses std::__allocator_base as a template alias for the std::allocator
base class. Same effective difference.

Was hoping that this would improve the generated doxygen html for
std::allocator, but new syntax not recognized by doxygen
(doxygen/672372). 

tested x86/linux

-benjamin
2012-03-19  Benjamin Kosnik  <bkoz@redhat.com>

	* include/bits/allocator.h (std::allocator): Base class is
	__allocator_base.
	(uses_allocator): Add to sub-grouping.
	* include/ext/new_allocator.h: Doxygen markup for tparm.

	* config/allocator/bitmap_allocator_base.h: Use __allocator_base
	template alias in C++11.
	* config/allocator/malloc_allocator_base.h: Same.
	* config/allocator/mt_allocator_base.h: Same.
	* config/allocator/new_allocator_base.h: Same.
	* config/allocator/pool_allocator_base.h: Same.

diff --git a/libstdc++-v3/config/allocator/bitmap_allocator_base.h b/libstdc++-v3/config/allocator/bitmap_allocator_base.h
index 3ae4cff..4abe615 100644
--- a/libstdc++-v3/config/allocator/bitmap_allocator_base.h
+++ b/libstdc++-v3/config/allocator/bitmap_allocator_base.h
@@ -1,6 +1,6 @@
 // Base to std::allocator -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010, 2012 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
@@ -30,8 +30,26 @@
 #ifndef _GLIBCXX_CXX_ALLOCATOR_H
 #define _GLIBCXX_CXX_ALLOCATOR_H 1
 
-// Define bitmap_allocator as the base class to std::allocator.
 #include <ext/bitmap_allocator.h>
-#define __glibcxx_base_allocator  __gnu_cxx::bitmap_allocator
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std
+{
+  /**
+   *  @brief  An alias to the base class for std::allocator.
+   *  @ingroup allocators
+   *
+   *  Used to set the std::allocator base class to
+   *  __gnu_cxx::bitmap_allocator.
+   *
+   *  @tparam  _Tp  Type of allocated object.
+    */
+  template<typename _Tp>
+    using __allocator_base = __gnu_cxx::bitmap_allocator<_Tp>;
+}
+#else
+// Define bitmap_allocator as the base class to std::allocator.
+# define __allocator_base  __gnu_cxx::bitmap_allocator
+#endif
 
 #endif
diff --git a/libstdc++-v3/config/allocator/malloc_allocator_base.h b/libstdc++-v3/config/allocator/malloc_allocator_base.h
index 1192b95..e40f424 100644
--- a/libstdc++-v3/config/allocator/malloc_allocator_base.h
+++ b/libstdc++-v3/config/allocator/malloc_allocator_base.h
@@ -1,6 +1,6 @@
 // Base to std::allocator -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010, 2012 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
@@ -30,8 +30,26 @@
 #ifndef _GLIBCXX_CXX_ALLOCATOR_H
 #define _GLIBCXX_CXX_ALLOCATOR_H 1
 
-// Define new_allocator as the base class to std::allocator.
 #include <ext/malloc_allocator.h>
-#define __glibcxx_base_allocator  __gnu_cxx::malloc_allocator
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std
+{
+  /**
+   *  @brief  An alias to the base class for std::allocator.
+   *  @ingroup allocators
+   *
+   *  Used to set the std::allocator base class to
+   *  __gnu_cxx::malloc_allocator.
+   *
+   *  @tparam  _Tp  Type of allocated object.
+    */
+  template<typename _Tp>
+    using __allocator_base = __gnu_cxx::malloc_allocator<_Tp>;
+}
+#else
+// Define malloc_allocator as the base class to std::allocator.
+# define __allocator_base  __gnu_cxx::malloc_allocator
+#endif
 
 #endif
diff --git a/libstdc++-v3/config/allocator/mt_allocator_base.h b/libstdc++-v3/config/allocator/mt_allocator_base.h
index 9cd8f8a..66ab6a0 100644
--- a/libstdc++-v3/config/allocator/mt_allocator_base.h
+++ b/libstdc++-v3/config/allocator/mt_allocator_base.h
@@ -1,6 +1,6 @@
 // Base to std::allocator -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010, 2012 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
@@ -30,8 +30,26 @@
 #ifndef _GLIBCXX_CXX_ALLOCATOR_H
 #define _GLIBCXX_CXX_ALLOCATOR_H 1
 
-// Define mt_allocator as the base class to std::allocator.
 #include <ext/mt_allocator.h>
-#define __glibcxx_base_allocator  __gnu_cxx::__mt_alloc
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std
+{
+  /**
+   *  @brief  An alias to the base class for std::allocator.
+   *  @ingroup allocators
+   *
+   *  Used to set the std::allocator base class to
+   *  __gnu_cxx::__mt_alloc.
+   *
+   *  @tparam  _Tp  Type of allocated object.
+    */
+  template<typename _Tp>
+    using __allocator_base = __gnu_cxx::__mt_alloc<_Tp>;
+}
+#else
+// Define __mt_alloc as the base class to std::allocator.
+# define __allocator_base  __gnu_cxx::__mt_alloc
+#endif
 
 #endif
diff --git a/libstdc++-v3/config/allocator/new_allocator_base.h b/libstdc++-v3/config/allocator/new_allocator_base.h
index 6f8aef3..7a0b71b 100644
--- a/libstdc++-v3/config/allocator/new_allocator_base.h
+++ b/libstdc++-v3/config/allocator/new_allocator_base.h
@@ -1,6 +1,6 @@
 // Base to std::allocator -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010, 2012 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
@@ -30,8 +30,26 @@
 #ifndef _GLIBCXX_CXX_ALLOCATOR_H
 #define _GLIBCXX_CXX_ALLOCATOR_H 1
 
-// Define new_allocator as the base class to std::allocator.
 #include <ext/new_allocator.h>
-#define __glibcxx_base_allocator  __gnu_cxx::new_allocator
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std
+{
+  /**
+   *  @brief  An alias to the base class for std::allocator.
+   *  @ingroup allocators
+   *
+   *  Used to set the std::allocator base class to
+   *  __gnu_cxx::new_allocator.
+   *
+   *  @tparam  _Tp  Type of allocated object.
+    */
+  template<typename _Tp>
+    using __allocator_base = __gnu_cxx::new_allocator<_Tp>;
+}
+#else
+// Define new_allocator as the base class to std::allocator.
+# define __allocator_base  __gnu_cxx::new_allocator
+#endif
 
 #endif
diff --git a/libstdc++-v3/config/allocator/pool_allocator_base.h b/libstdc++-v3/config/allocator/pool_allocator_base.h
index 55aec79..2fc49e2 100644
--- a/libstdc++-v3/config/allocator/pool_allocator_base.h
+++ b/libstdc++-v3/config/allocator/pool_allocator_base.h
@@ -1,6 +1,6 @@
 // Base to std::allocator -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2009, 2010, 2012 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
@@ -30,8 +30,26 @@
 #ifndef _GLIBCXX_CXX_ALLOCATOR_H
 #define _GLIBCXX_CXX_ALLOCATOR_H 1
 
-// Define new_allocator as the base class to std::allocator.
 #include <ext/pool_allocator.h>
-#define __glibcxx_base_allocator  __gnu_cxx::__pool_alloc
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+namespace std
+{
+  /**
+   *  @brief  An alias to the base class for std::allocator.
+   *  @ingroup allocators
+   *
+   *  Used to set the std::allocator base class to
+   *  __gnu_cxx::__pool_alloc.
+   *
+   *  @tparam  _Tp  Type of allocated object.
+    */
+  template<typename _Tp>
+    using __allocator_base = __gnu_cxx::__pool_alloc<_Tp>;
+}
+#else
+// Define __pool_alloc as the base class to std::allocator.
+# define __allocator_base  __gnu_cxx::__pool_alloc
+#endif
 
 #endif
diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index b985d3f..49ba0b5 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -1,7 +1,7 @@
 // Allocators -*- C++ -*-
 
 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 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
@@ -84,9 +84,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *
    *  See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html
    *  for further details.
+   *
+   *  @tparam  _Tp  Type of allocated object.
    */
   template<typename _Tp>
-    class allocator: public __glibcxx_base_allocator<_Tp>
+    class allocator: public __allocator_base<_Tp>
     {
    public:
       typedef size_t     size_type;
@@ -104,7 +106,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       allocator() throw() { }
 
       allocator(const allocator& __a) throw()
-      : __glibcxx_base_allocator<_Tp>(__a) { }
+      : __allocator_base<_Tp>(__a) { }
 
       template<typename _Tp1>
         allocator(const allocator<_Tp1>&) throw() { }
@@ -134,6 +136,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
     { return false; }
 
+  /// Declare uses_allocator so it can be specialized in <queue> etc.
+  template<typename, typename>
+    struct uses_allocator;
+
   /**
    * @}
    */
@@ -146,7 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   // Undefine.
-#undef __glibcxx_base_allocator
+#undef __allocator_base
 
   // To implement Option 3 of DR 431.
   template<typename _Alloc, bool = __is_empty(_Alloc)>
@@ -206,10 +212,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	  { return false; }
       }
     };
-
-  // Declare uses_allocator so it can be specialized in <queue> etc.
-  template<typename, typename>
-    struct uses_allocator;
 #endif
 
 _GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h
index 0c82bd0..1e4069d 100644
--- a/libstdc++-v3/include/ext/new_allocator.h
+++ b/libstdc++-v3/include/ext/new_allocator.h
@@ -49,6 +49,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *  This is precisely the allocator defined in the C++ Standard. 
    *    - all allocation calls operator new
    *    - all deallocation calls operator delete
+   *
+   *  @tparam  _Tp  Type of allocated object.
    */
   template<typename _Tp>
     class new_allocator

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]