Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/regex/src/regex_raw_buffer.cpp @ 14

Last change on this file since 14 was 12, checked in by landauf, 17 years ago

added boost

File size: 1.7 KB
Line 
1/*
2 *
3 * Copyright (c) 2004
4 * John Maddock
5 *
6 * Use, modification and distribution are subject to the
7 * Boost Software License, Version 1.0. (See accompanying file
8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 *
10 */
11
12 /*
13  *   LOCATION:    see http://www.boost.org for most recent version.
14  *   FILE         regex_raw_buffer.cpp
15  *   VERSION      see <boost/version.hpp>
16  *   DESCRIPTION: Member functions for class raw_storage.
17  */
18
19
20#define BOOST_REGEX_SOURCE
21#include <memory>
22#include <cstring>
23#include <boost/assert.hpp>
24#include <boost/regex/v4/regex_raw_buffer.hpp>
25
26#if defined(BOOST_NO_STDC_NAMESPACE)
27namespace std{
28   using ::memcpy;
29   using ::memmove;
30}
31#endif
32
33
34namespace boost{ namespace re_detail{
35
36void BOOST_REGEX_CALL raw_storage::resize(size_type n)
37{
38   register size_type newsize = start ? last - start : 1024;
39   while(newsize < n)
40      newsize *= 2;
41   register size_type datasize = end - start;
42   // extend newsize to WORD/DWORD boundary:
43   newsize = (newsize + padding_mask) & ~(padding_mask);
44
45   // allocate and copy data:
46   register pointer ptr = static_cast<pointer>(::operator new(newsize));
47   BOOST_REGEX_NOEH_ASSERT(ptr)
48   std::memcpy(ptr, start, datasize);
49
50   // get rid of old buffer:
51   ::operator delete(start);
52
53   // and set up pointers:
54   start = ptr;
55   end = ptr + datasize;
56   last = ptr + newsize;
57}
58
59void* BOOST_REGEX_CALL raw_storage::insert(size_type pos, size_type n)
60{
61   BOOST_ASSERT(pos <= size_type(end - start));
62   if(size_type(last - end) < n)
63      resize(n + (end - start));
64   register void* result = start + pos;
65   std::memmove(start + pos + n, start + pos, (end - start) - pos);
66   end += n;
67   return result;
68}
69
70}} // namespaces
Note: See TracBrowser for help on using the repository browser.