211 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			211 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 1998-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         regex_raw_buffer.hpp
							 | 
						||
| 
								 | 
							
								  *   VERSION      see <boost/version.hpp>
							 | 
						||
| 
								 | 
							
								  *   DESCRIPTION: Raw character buffer for regex code.
							 | 
						||
| 
								 | 
							
								  *                Note this is an internal header file included
							 | 
						||
| 
								 | 
							
								  *                by regex.hpp, do not include on its own.
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_REGEX_RAW_BUFFER_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_REGEX_RAW_BUFFER_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_REGEX_CONFIG_HPP
							 | 
						||
| 
								 | 
							
								#include <boost/regex/config.hpp>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <algorithm>
							 | 
						||
| 
								 | 
							
								#include <cstddef>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{
							 | 
						||
| 
								 | 
							
								   namespace BOOST_REGEX_DETAIL_NS{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_MSVC
							 | 
						||
| 
								 | 
							
								#pragma warning(push)
							 | 
						||
| 
								 | 
							
								#pragma warning(disable: 4103)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_HAS_ABI_HEADERS
							 | 
						||
| 
								 | 
							
								#  include BOOST_ABI_PREFIX
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_MSVC
							 | 
						||
| 
								 | 
							
								#pragma warning(pop)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct empty_padding{};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								union padding
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   void* p;
							 | 
						||
| 
								 | 
							
								   unsigned int i;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <int N>
							 | 
						||
| 
								 | 
							
								struct padding3
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   enum{
							 | 
						||
| 
								 | 
							
								      padding_size = 8,
							 | 
						||
| 
								 | 
							
								      padding_mask = 7
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct padding3<2>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   enum{
							 | 
						||
| 
								 | 
							
								      padding_size = 2,
							 | 
						||
| 
								 | 
							
								      padding_mask = 1
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct padding3<4>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   enum{
							 | 
						||
| 
								 | 
							
								      padding_size = 4,
							 | 
						||
| 
								 | 
							
								      padding_mask = 3
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct padding3<8>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   enum{
							 | 
						||
| 
								 | 
							
								      padding_size = 8,
							 | 
						||
| 
								 | 
							
								      padding_mask = 7
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct padding3<16>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   enum{
							 | 
						||
| 
								 | 
							
								      padding_size = 16,
							 | 
						||
| 
								 | 
							
								      padding_mask = 15
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum{
							 | 
						||
| 
								 | 
							
								   padding_size = padding3<sizeof(padding)>::padding_size,
							 | 
						||
| 
								 | 
							
								   padding_mask = padding3<sizeof(padding)>::padding_mask
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// class raw_storage
							 | 
						||
| 
								 | 
							
								// basically this is a simplified vector<unsigned char>
							 | 
						||
| 
								 | 
							
								// this is used by basic_regex for expression storage
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BOOST_REGEX_DECL raw_storage
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								   typedef std::size_t           size_type;
							 | 
						||
| 
								 | 
							
								   typedef unsigned char*        pointer;
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								   pointer last, start, end;
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   raw_storage();
							 | 
						||
| 
								 | 
							
								   raw_storage(size_type n);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   ~raw_storage()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      ::operator delete(start);
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   void BOOST_REGEX_CALL resize(size_type n);
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								   void* BOOST_REGEX_CALL extend(size_type n)
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      if(size_type(last - end) < n)
							 | 
						||
| 
								 | 
							
								         resize(n + (end - start));
							 | 
						||
| 
								 | 
							
								      pointer result = end;
							 | 
						||
| 
								 | 
							
								      end += n;
							 | 
						||
| 
								 | 
							
								      return result;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   void* BOOST_REGEX_CALL insert(size_type pos, size_type n);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   size_type BOOST_REGEX_CALL size()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      return end - start;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   size_type BOOST_REGEX_CALL capacity()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      return last - start;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   void* BOOST_REGEX_CALL data()const
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      return start;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   size_type BOOST_REGEX_CALL index(void* ptr)
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      return static_cast<pointer>(ptr) - static_cast<pointer>(data());
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   void BOOST_REGEX_CALL clear()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      end = start;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   void BOOST_REGEX_CALL align()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      // move end up to a boundary:
							 | 
						||
| 
								 | 
							
								      end = start + (((end - start) + padding_mask) & ~padding_mask);
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								   void swap(raw_storage& that)
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      std::swap(start, that.start);
							 | 
						||
| 
								 | 
							
								      std::swap(end, that.end);
							 | 
						||
| 
								 | 
							
								      std::swap(last, that.last);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline raw_storage::raw_storage()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   last = start = end = 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline raw_storage::raw_storage(size_type n)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   start = end = static_cast<pointer>(::operator new(n));
							 | 
						||
| 
								 | 
							
								   BOOST_REGEX_NOEH_ASSERT(start)
							 | 
						||
| 
								 | 
							
								   last = start + n;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_MSVC
							 | 
						||
| 
								 | 
							
								#pragma warning(push)
							 | 
						||
| 
								 | 
							
								#pragma warning(disable: 4103)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_HAS_ABI_HEADERS
							 | 
						||
| 
								 | 
							
								#  include BOOST_ABI_SUFFIX
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_MSVC
							 | 
						||
| 
								 | 
							
								#pragma warning(pop)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace BOOST_REGEX_DETAIL_NS
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |