⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 allocator_utilities.hpp

📁 system C源码 一种替代verilog的语言
💻 HPP
字号:
/* Copyright 2003-2005 Joaqu韓 M L髉ez Mu駉z. * 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 <sysc/packages/boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */#include <sysc/packages/boost/detail/workaround.hpp>#include <sysc/packages/boost/mpl/aux_/msvc_never_true.hpp>#include <sysc/packages/boost/mpl/eval_if.hpp>#include <sysc/packages/boost/type_traits/is_same.hpp>#include <cstddef>#include <memory>#include <new>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. */template<typename Type>class partial_std_allocator_wrapper:public std::allocator<Type>{public:  partial_std_allocator_wrapper(){};  template<typename Other>  partial_std_allocator_wrapper(const partial_std_allocator_wrapper<Other>&){}  partial_std_allocator_wrapper(const std::allocator<Type>& x):    std::allocator<Type>(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<Type>& 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<typename Allocator>struct is_partial_std_allocator{  BOOST_STATIC_CONSTANT(bool,    value=      (is_same<        std::allocator<BOOST_DEDUCED_TYPENAME Allocator::value_type>,        Allocator      >::value)||      (is_same<        partial_std_allocator_wrapper<          BOOST_DEDUCED_TYPENAME Allocator::value_type>,        Allocator      >::value));};#elsetemplate<typename Allocator>struct is_partial_std_allocator{  BOOST_STATIC_CONSTANT(bool,value=false);};#endif/* rebind operations for defective std allocators */template<typename Allocator,typename Type>struct partial_std_allocator_rebind_to{  typedef partial_std_allocator_wrapper<Type> 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 <sysc/packages/boost/mpl/aux_/msvc_dtw.hpp> (thanks, Aleksey!) */template<typename Allocator>struct rebinder{  template<bool> struct fake_allocator:Allocator{};  template<> struct fake_allocator<true>  {    template<typename Type> struct rebind{};  };  template<typename Type>  struct result:    fake_allocator<mpl::aux::msvc_never_true<Allocator>::value>::      template rebind<Type>  {  };};#elsetemplate<typename Allocator>struct rebinder{  template<typename Type>  struct result  {      typedef typename Allocator::BOOST_NESTED_TEMPLATE           rebind<Type>::other other;  };};#endiftemplate<typename Allocator,typename Type>struct compliant_allocator_rebind_to{  typedef typename rebinder<Allocator>::      BOOST_NESTED_TEMPLATE result<Type>::other type;};/* rebind front-end */template<typename Allocator,typename Type>struct rebind_to:  mpl::eval_if_c<    is_partial_std_allocator<Allocator>::value,    partial_std_allocator_rebind_to<Allocator,Type>,    compliant_allocator_rebind_to<Allocator,Type>  >{};/* allocator-independent versions of construct and destroy */template<typename Type>void construct(void* p,const Type& t){  new (p) Type(t);}template<typename Type>void destroy(const Type* p){  p->~Type();}} /* namespace boost::detail::allocator */} /* namespace boost::detail */} /* namespace boost */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -