imgtools/imglib/boostlibrary/boost/regex/v4/mem_block_cache.hpp
author jjkang
Fri, 25 Jun 2010 18:11:34 +0800
changeset 600 6d08f4a05d93
permissions -rw-r--r--
add deprecated files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
600
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     1
 /*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     2
 * Copyright (c) 2002
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     3
 * John Maddock
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     4
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     5
 * Use, modification and distribution are subject to the 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     6
 * Boost Software License, Version 1.0. (See accompanying file 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     7
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     8
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     9
 */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    10
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    11
 /*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    12
  *   LOCATION:    see http://www.boost.org for most recent version.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
  *   FILE         mem_block_cache.hpp
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
  *   VERSION      see <boost/version.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
  *   DESCRIPTION: memory block cache used by the non-recursive matcher.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
  */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
#ifndef BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
#define BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#include <new>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
#ifdef BOOST_HAS_THREADS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
#include <boost/regex/pending/static_mutex.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
#  include BOOST_ABI_PREFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
namespace boost{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
namespace re_detail{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
struct mem_block_node
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
   mem_block_node* next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
struct mem_block_cache
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
   // this member has to be statically initialsed:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
   mem_block_node* next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
   unsigned cached_blocks;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
#ifdef BOOST_HAS_THREADS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
   boost::static_mutex mut;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
   ~mem_block_cache()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
      while(next)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
         mem_block_node* old = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
         next = next->next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
         ::operator delete(old);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
   void* get()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
#ifdef BOOST_HAS_THREADS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
      boost::static_mutex::scoped_lock g(mut);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
     if(next)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
         mem_block_node* result = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
         next = next->next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
         --cached_blocks;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
         return result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
      return ::operator new(BOOST_REGEX_BLOCKSIZE);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
   void put(void* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
#ifdef BOOST_HAS_THREADS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
      boost::static_mutex::scoped_lock g(mut);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
      if(cached_blocks >= BOOST_REGEX_MAX_CACHE_BLOCKS)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
         ::operator delete(p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
         mem_block_node* old = static_cast<mem_block_node*>(p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
         old->next = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
         next = old;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
         ++cached_blocks;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
extern mem_block_cache block_cache;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
#  include BOOST_ABI_SUFFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99