map_index.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 101 行

HPP
101
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2005-2008. 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 http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_MAP_INDEX_HPP#define BOOST_INTERPROCESS_MAP_INDEX_HPP#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>#include <functional>#include <utility>#include <boost/interprocess/containers/map.hpp>#include <boost/interprocess/allocators/private_adaptive_pool.hpp>//!\file//!Describes index adaptor of boost::map container, to use it//!as name/shared memory indexnamespace boost {namespace interprocess {namespace detail{//!Helper class to define typedefs from IndexTraitstemplate <class MapConfig>struct map_index_aux{   typedef typename MapConfig::key_type            key_type;   typedef typename MapConfig::mapped_type         mapped_type;   typedef std::less<key_type>                     key_less;   typedef std::pair<const key_type, mapped_type>  value_type;   typedef private_adaptive_pool            <value_type,               typename MapConfig::         segment_manager_base>                     allocator_type;   typedef boost::interprocess::map      <key_type,  mapped_type,       key_less, allocator_type>                   index_t;};}  //namespace detail {//!Index type based in boost::interprocess::map. Just derives from boost::interprocess::map //!and defines the interface needed by managed memory segmentstemplate <class MapConfig>class map_index   //Derive class from map specialization   : public detail::map_index_aux<MapConfig>::index_t{   /// @cond   typedef detail::map_index_aux<MapConfig>  index_aux;   typedef typename index_aux::index_t       base_type;   typedef typename MapConfig::      segment_manager_base          segment_manager_base;   /// @endcond   public:   //!Constructor. Takes a pointer to the   //!segment manager. Can throw   map_index(segment_manager_base *segment_mngr)      : base_type(typename index_aux::key_less(),                  segment_mngr){}   //!This reserves memory to optimize the insertion of n   //!elements in the index   void reserve(std::size_t)      {  /*Does nothing, map has not reserve or rehash*/  }   //!This tries to free previously allocate   //!unused memory.   void shrink_to_fit()   {  base_type::get_stored_allocator().deallocate_free_blocks(); }};/// @cond//!Trait class to detect if an index is a node//!index. This allows more efficient operations//!when deallocating named objects.template<class MapConfig>struct is_node_index   <boost::interprocess::map_index<MapConfig> >{   enum {   value = true };};/// @endcond}}   //namespace boost { namespace interprocess {#include <boost/interprocess/detail/config_end.hpp>#endif   //#ifndef BOOST_INTERPROCESS_MAP_INDEX_HPP

⌨️ 快捷键说明

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