From fa7548481a0fa6dc43c23c6b7f3afa4d6fd3e628 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Mon, 19 Mar 2012 21:41:15 +0000 Subject: [PATCH] allocator.h (std::allocator): Base class is __allocator_base. 2012-03-19 Benjamin Kosnik * 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. From-SVN: r185544 --- libstdc++-v3/ChangeLog | 14 +++++++++++ .../config/allocator/bitmap_allocator_base.h | 24 ++++++++++++++++--- .../config/allocator/malloc_allocator_base.h | 24 ++++++++++++++++--- .../config/allocator/mt_allocator_base.h | 24 ++++++++++++++++--- .../config/allocator/new_allocator_base.h | 24 ++++++++++++++++--- .../config/allocator/pool_allocator_base.h | 24 ++++++++++++++++--- libstdc++-v3/include/bits/allocator.h | 18 +++++++------- libstdc++-v3/include/ext/new_allocator.h | 2 ++ 8 files changed, 131 insertions(+), 23 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a4ffc02b35a..80e6de9b0d8 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2012-03-19 Benjamin Kosnik + + * 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. + 2012-03-19 Benjamin Kosnik * include/ext/pb_ds/detail/pat_trie_/ diff --git a/libstdc++-v3/config/allocator/bitmap_allocator_base.h b/libstdc++-v3/config/allocator/bitmap_allocator_base.h index 3ae4cff6ccc..4abe615274b 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 -#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 + 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 1192b95596e..e40f424b60b 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 -#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 + 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 9cd8f8a6f0d..66ab6a05245 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 -#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 + 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 6f8aef360a6..7a0b71becaf 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 -#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 + 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 55aec79bcdf..2fc49e2eccb 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 -#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 + 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 b985d3f5e6f..49ba0b5be4f 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 - 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 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 etc. + template + 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 @@ -206,10 +212,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return false; } } }; - - // Declare uses_allocator so it can be specialized in etc. - template - 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 0c82bd0ae90..1e4069df922 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 class new_allocator