x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
allocator_utilities.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\detail\allocator_utilities.hpp
旋转
特效
属性
历史版本
/* Copyright 2003-2007 Joaqu�n M L�pez Mu�oz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See Boost website at http://www.boost.org/ */ #ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP #define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP #include
/* keep it first to prevent nasty warns in MSVC */ #include
#include
#include
#include
#include
#include
#include
namespace boost{ namespace detail{ /* Allocator adaption layer. Some stdlibs provide allocators without rebind * and template ctors. These facilities are simulated with the external * template class rebind_to and the aid of partial_std_allocator_wrapper. */ namespace allocator{ /* partial_std_allocator_wrapper inherits the functionality of a std * allocator while providing a templatized ctor and other bits missing * in some stdlib implementation or another. */ template
class partial_std_allocator_wrapper:public std::allocator
{ public: /* Oddly enough, STLport does not define std::allocator
::value_type * when configured to work without partial template specialization. * No harm in supplying the definition here unconditionally. */ typedef Type value_type; partial_std_allocator_wrapper(){}; template
partial_std_allocator_wrapper(const partial_std_allocator_wrapper
&){} partial_std_allocator_wrapper(const std::allocator
& x): std::allocator
(x) { }; #if defined(BOOST_DINKUMWARE_STDLIB) /* Dinkumware guys didn't provide a means to call allocate() without * supplying a hint, in disagreement with the standard. */ Type* allocate(std::size_t n,const void* hint=0) { std::allocator
& a=*this; return a.allocate(n,hint); } #endif }; /* Detects whether a given allocator belongs to a defective stdlib not * having the required member templates. * Note that it does not suffice to check the Boost.Config stdlib * macros, as the user might have passed a custom, compliant allocator. * The checks also considers partial_std_allocator_wrapper to be * a standard defective allocator. */ #if defined(BOOST_NO_STD_ALLOCATOR)&&\ (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB)) template
struct is_partial_std_allocator { BOOST_STATIC_CONSTANT(bool, value= (is_same< std::allocator
, Allocator >::value)|| (is_same< partial_std_allocator_wrapper< BOOST_DEDUCED_TYPENAME Allocator::value_type>, Allocator >::value)); }; #else template
struct is_partial_std_allocator { BOOST_STATIC_CONSTANT(bool,value=false); }; #endif /* rebind operations for defective std allocators */ template
struct partial_std_allocator_rebind_to { typedef partial_std_allocator_wrapper
type; }; /* rebind operation in all other cases */ #if BOOST_WORKAROUND(BOOST_MSVC,<1300) /* Workaround for a problem in MSVC with dependent template typedefs * when doing rebinding of allocators. * Modeled after
(thanks, Aleksey!) */ template
struct rebinder { template
struct fake_allocator:Allocator{}; template<> struct fake_allocator
{ template
struct rebind{}; }; template
struct result: fake_allocator
::value>:: template rebind
{ }; }; #else template
struct rebinder { template
struct result { typedef typename Allocator::BOOST_NESTED_TEMPLATE rebind
::other other; }; }; #endif template
struct compliant_allocator_rebind_to { typedef typename rebinder
:: BOOST_NESTED_TEMPLATE result
::other type; }; /* rebind front-end */ template
struct rebind_to: mpl::eval_if_c< is_partial_std_allocator
::value, partial_std_allocator_rebind_to
, compliant_allocator_rebind_to
> { }; /* allocator-independent versions of construct and destroy */ template
void construct(void* p,const Type& t) { new (p) Type(t); } template
void destroy(const Type* p) { p->~Type(); } } /* namespace boost::detail::allocator */ } /* namespace boost::detail */ } /* namespace boost */ #endif
allocator_utilities.hpp
网页地址
文件地址
上一页
2/61
下一页
下载
( 4 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.