allocator.h (std::allocator): Base class is __allocator_base.

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.

From-SVN: r185544
This commit is contained in:
Benjamin Kosnik 2012-03-19 21:41:15 +00:00 committed by Benjamin Kosnik
parent b234b0ca04
commit fa7548481a
8 changed files with 131 additions and 23 deletions

View File

@ -1,3 +1,17 @@
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.
2012-03-19 Benjamin Kosnik <bkoz@redhat.com> 2012-03-19 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/pb_ds/detail/pat_trie_/ * include/ext/pb_ds/detail/pat_trie_/

View File

@ -1,6 +1,6 @@
// Base to std::allocator -*- C++ -*- // 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 // 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 // software; you can redistribute it and/or modify it under the
@ -30,8 +30,26 @@
#ifndef _GLIBCXX_CXX_ALLOCATOR_H #ifndef _GLIBCXX_CXX_ALLOCATOR_H
#define _GLIBCXX_CXX_ALLOCATOR_H 1 #define _GLIBCXX_CXX_ALLOCATOR_H 1
// Define bitmap_allocator as the base class to std::allocator.
#include <ext/bitmap_allocator.h> #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 #endif

View File

@ -1,6 +1,6 @@
// Base to std::allocator -*- C++ -*- // 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 // 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 // software; you can redistribute it and/or modify it under the
@ -30,8 +30,26 @@
#ifndef _GLIBCXX_CXX_ALLOCATOR_H #ifndef _GLIBCXX_CXX_ALLOCATOR_H
#define _GLIBCXX_CXX_ALLOCATOR_H 1 #define _GLIBCXX_CXX_ALLOCATOR_H 1
// Define new_allocator as the base class to std::allocator.
#include <ext/malloc_allocator.h> #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 #endif

View File

@ -1,6 +1,6 @@
// Base to std::allocator -*- C++ -*- // 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 // 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 // software; you can redistribute it and/or modify it under the
@ -30,8 +30,26 @@
#ifndef _GLIBCXX_CXX_ALLOCATOR_H #ifndef _GLIBCXX_CXX_ALLOCATOR_H
#define _GLIBCXX_CXX_ALLOCATOR_H 1 #define _GLIBCXX_CXX_ALLOCATOR_H 1
// Define mt_allocator as the base class to std::allocator.
#include <ext/mt_allocator.h> #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 #endif

View File

@ -1,6 +1,6 @@
// Base to std::allocator -*- C++ -*- // 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 // 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 // software; you can redistribute it and/or modify it under the
@ -30,8 +30,26 @@
#ifndef _GLIBCXX_CXX_ALLOCATOR_H #ifndef _GLIBCXX_CXX_ALLOCATOR_H
#define _GLIBCXX_CXX_ALLOCATOR_H 1 #define _GLIBCXX_CXX_ALLOCATOR_H 1
// Define new_allocator as the base class to std::allocator.
#include <ext/new_allocator.h> #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 #endif

View File

@ -1,6 +1,6 @@
// Base to std::allocator -*- C++ -*- // 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 // 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 // software; you can redistribute it and/or modify it under the
@ -30,8 +30,26 @@
#ifndef _GLIBCXX_CXX_ALLOCATOR_H #ifndef _GLIBCXX_CXX_ALLOCATOR_H
#define _GLIBCXX_CXX_ALLOCATOR_H 1 #define _GLIBCXX_CXX_ALLOCATOR_H 1
// Define new_allocator as the base class to std::allocator.
#include <ext/pool_allocator.h> #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 #endif

View File

@ -1,7 +1,7 @@
// Allocators -*- C++ -*- // Allocators -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, // 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 // 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 // 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 * See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html
* for further details. * for further details.
*
* @tparam _Tp Type of allocated object.
*/ */
template<typename _Tp> template<typename _Tp>
class allocator: public __glibcxx_base_allocator<_Tp> class allocator: public __allocator_base<_Tp>
{ {
public: public:
typedef size_t size_type; typedef size_t size_type;
@ -104,7 +106,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
allocator() throw() { } allocator() throw() { }
allocator(const allocator& __a) throw() allocator(const allocator& __a) throw()
: __glibcxx_base_allocator<_Tp>(__a) { } : __allocator_base<_Tp>(__a) { }
template<typename _Tp1> template<typename _Tp1>
allocator(const allocator<_Tp1>&) throw() { } allocator(const allocator<_Tp1>&) throw() { }
@ -134,6 +136,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator!=(const allocator<_Tp>&, const allocator<_Tp>&) operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
{ return false; } { 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 #endif
// Undefine. // Undefine.
#undef __glibcxx_base_allocator #undef __allocator_base
// To implement Option 3 of DR 431. // To implement Option 3 of DR 431.
template<typename _Alloc, bool = __is_empty(_Alloc)> template<typename _Alloc, bool = __is_empty(_Alloc)>
@ -206,10 +212,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return false; } { return false; }
} }
}; };
// Declare uses_allocator so it can be specialized in <queue> etc.
template<typename, typename>
struct uses_allocator;
#endif #endif
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION

View File

@ -49,6 +49,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* This is precisely the allocator defined in the C++ Standard. * This is precisely the allocator defined in the C++ Standard.
* - all allocation calls operator new * - all allocation calls operator new
* - all deallocation calls operator delete * - all deallocation calls operator delete
*
* @tparam _Tp Type of allocated object.
*/ */
template<typename _Tp> template<typename _Tp>
class new_allocator class new_allocator