diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a4ffc02b35a4..80e6de9b0d8f 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 3ae4cff6ccc9..4abe615274bd 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 1192b95596e9..e40f424b60ba 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 9cd8f8a6f0d0..66ab6a052450 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 6f8aef360a68..7a0b71becafd 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 55aec79bcdfb..2fc49e2eccb8 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 b985d3f5e6fe..49ba0b5be4fb 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 0c82bd0ae900..1e4069df9222 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