Sha256: d3b44af3918819bbc28e610fe2094ee154866f6e0fd0ecc36f7c44528ce8be92

Contents?: true

Size: 1.94 KB

Versions: 60

Compression:

Stored size: 1.94 KB

Contents

 /*
 * 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
#endif

namespace 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

Version data entries

60 entries across 60 versions & 2 rubygems

Version Path
passenger-5.0.24 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.23 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.22 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-4.0.60 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.21 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.20 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.19 src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.18 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.17 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.16 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.15 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.14 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.13 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.11 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.10 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.9 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.8 ext/boost/regex/v4/mem_block_cache.hpp
buncher-1.0.5 ext/boost/1.57.0/include/boost//regex/v4/mem_block_cache.hpp
passenger-5.0.7 ext/boost/regex/v4/mem_block_cache.hpp
passenger-5.0.6 ext/boost/regex/v4/mem_block_cache.hpp