mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-26 22:17:41 +00:00
376aaac146
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13298 a592a061-630c-0410-9148-cb99ea01b6c8
71 lines
1.7 KiB
C++
71 lines
1.7 KiB
C++
/*
|
|
*
|
|
* Copyright (c) 2004
|
|
* 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 regex_raw_buffer.cpp
|
|
* VERSION see <boost/version.hpp>
|
|
* DESCRIPTION: Member functions for class raw_storage.
|
|
*/
|
|
|
|
|
|
#define BOOST_REGEX_SOURCE
|
|
#include <memory>
|
|
#include <cstring>
|
|
#include <boost/assert.hpp>
|
|
#include <boost/regex/v4/regex_raw_buffer.hpp>
|
|
|
|
#if defined(BOOST_NO_STDC_NAMESPACE)
|
|
namespace std{
|
|
using ::memcpy;
|
|
using ::memmove;
|
|
}
|
|
#endif
|
|
|
|
|
|
namespace boost{ namespace re_detail{
|
|
|
|
void BOOST_REGEX_CALL raw_storage::resize(size_type n)
|
|
{
|
|
register size_type newsize = start ? last - start : 1024;
|
|
while(newsize < n)
|
|
newsize *= 2;
|
|
register size_type datasize = end - start;
|
|
// extend newsize to WORD/DWORD boundary:
|
|
newsize = (newsize + padding_mask) & ~(padding_mask);
|
|
|
|
// allocate and copy data:
|
|
register pointer ptr = static_cast<pointer>(::operator new(newsize));
|
|
BOOST_REGEX_NOEH_ASSERT(ptr)
|
|
std::memcpy(ptr, start, datasize);
|
|
|
|
// get rid of old buffer:
|
|
::operator delete(start);
|
|
|
|
// and set up pointers:
|
|
start = ptr;
|
|
end = ptr + datasize;
|
|
last = ptr + newsize;
|
|
}
|
|
|
|
void* BOOST_REGEX_CALL raw_storage::insert(size_type pos, size_type n)
|
|
{
|
|
BOOST_ASSERT(pos <= size_type(end - start));
|
|
if(size_type(last - end) < n)
|
|
resize(n + (end - start));
|
|
register void* result = start + pos;
|
|
std::memmove(start + pos + n, start + pos, (end - start) - pos);
|
|
end += n;
|
|
return result;
|
|
}
|
|
|
|
}} // namespaces
|