regex_raw_buffer.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 71 行
CPP
71 行
/* * * 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;}#endifnamespace 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?