mem_block_cache.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 100 行
HPP
100 行
/* * Copyright (c) 2002 * John Maddock * * Use, modification and distribution are subject to 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) * */ /* * LOCATION: see http://www.boost.org for most recent version. * FILE mem_block_cache.hpp * VERSION see <boost/version.hpp> * DESCRIPTION: memory block cache used by the non-recursive matcher. */#ifndef BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP#define BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP#include <new>#ifdef BOOST_HAS_THREADS#include <boost/regex/pending/static_mutex.hpp>#endif#ifdef BOOST_HAS_ABI_HEADERS# include BOOST_ABI_PREFIX#endifnamespace boost{namespace re_detail{struct mem_block_node{ mem_block_node* next;};struct mem_block_cache{ // this member has to be statically initialsed: mem_block_node* next; unsigned cached_blocks;#ifdef BOOST_HAS_THREADS boost::static_mutex mut;#endif ~mem_block_cache() { while(next) { mem_block_node* old = next; next = next->next; ::operator delete(old); } } void* get() {#ifdef BOOST_HAS_THREADS boost::static_mutex::scoped_lock g(mut);#endif if(next) { mem_block_node* result = next; next = next->next; --cached_blocks; return result; } return ::operator new(BOOST_REGEX_BLOCKSIZE); } void put(void* p) {#ifdef BOOST_HAS_THREADS boost::static_mutex::scoped_lock g(mut);#endif if(cached_blocks >= BOOST_REGEX_MAX_CACHE_BLOCKS) { ::operator delete(p); } else { mem_block_node* old = static_cast<mem_block_node*>(p); old->next = next; next = old; ++cached_blocks; } }};extern mem_block_cache block_cache;}} // namespace boost#ifdef BOOST_HAS_ABI_HEADERS# include BOOST_ABI_SUFFIX#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?