annotate DEPENDENCIES/generic/include/boost/regex/v4/regex_raw_buffer.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*
Chris@16 2 *
Chris@16 3 * Copyright (c) 1998-2002
Chris@16 4 * John Maddock
Chris@16 5 *
Chris@16 6 * Use, modification and distribution are subject to the
Chris@16 7 * Boost Software License, Version 1.0. (See accompanying file
Chris@16 8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 *
Chris@16 10 */
Chris@16 11
Chris@16 12 /*
Chris@16 13 * LOCATION: see http://www.boost.org for most recent version.
Chris@16 14 * FILE regex_raw_buffer.hpp
Chris@16 15 * VERSION see <boost/version.hpp>
Chris@16 16 * DESCRIPTION: Raw character buffer for regex code.
Chris@16 17 * Note this is an internal header file included
Chris@16 18 * by regex.hpp, do not include on its own.
Chris@16 19 */
Chris@16 20
Chris@16 21 #ifndef BOOST_REGEX_RAW_BUFFER_HPP
Chris@16 22 #define BOOST_REGEX_RAW_BUFFER_HPP
Chris@16 23
Chris@16 24 #ifndef BOOST_REGEX_CONFIG_HPP
Chris@16 25 #include <boost/regex/config.hpp>
Chris@16 26 #endif
Chris@16 27
Chris@16 28 #include <algorithm>
Chris@16 29 #include <cstddef>
Chris@16 30
Chris@16 31 namespace boost{
Chris@16 32 namespace re_detail{
Chris@16 33
Chris@16 34 #ifdef BOOST_MSVC
Chris@16 35 #pragma warning(push)
Chris@16 36 #pragma warning(disable: 4103)
Chris@16 37 #endif
Chris@16 38 #ifdef BOOST_HAS_ABI_HEADERS
Chris@16 39 # include BOOST_ABI_PREFIX
Chris@16 40 #endif
Chris@16 41 #ifdef BOOST_MSVC
Chris@16 42 #pragma warning(pop)
Chris@16 43 #endif
Chris@16 44
Chris@16 45 struct empty_padding{};
Chris@16 46
Chris@16 47 union padding
Chris@16 48 {
Chris@16 49 void* p;
Chris@16 50 unsigned int i;
Chris@16 51 };
Chris@16 52
Chris@16 53 template <int N>
Chris@16 54 struct padding3
Chris@16 55 {
Chris@16 56 enum{
Chris@16 57 padding_size = 8,
Chris@16 58 padding_mask = 7
Chris@16 59 };
Chris@16 60 };
Chris@16 61
Chris@16 62 template<>
Chris@16 63 struct padding3<2>
Chris@16 64 {
Chris@16 65 enum{
Chris@16 66 padding_size = 2,
Chris@16 67 padding_mask = 1
Chris@16 68 };
Chris@16 69 };
Chris@16 70
Chris@16 71 template<>
Chris@16 72 struct padding3<4>
Chris@16 73 {
Chris@16 74 enum{
Chris@16 75 padding_size = 4,
Chris@16 76 padding_mask = 3
Chris@16 77 };
Chris@16 78 };
Chris@16 79
Chris@16 80 template<>
Chris@16 81 struct padding3<8>
Chris@16 82 {
Chris@16 83 enum{
Chris@16 84 padding_size = 8,
Chris@16 85 padding_mask = 7
Chris@16 86 };
Chris@16 87 };
Chris@16 88
Chris@16 89 template<>
Chris@16 90 struct padding3<16>
Chris@16 91 {
Chris@16 92 enum{
Chris@16 93 padding_size = 16,
Chris@16 94 padding_mask = 15
Chris@16 95 };
Chris@16 96 };
Chris@16 97
Chris@16 98 enum{
Chris@16 99 padding_size = padding3<sizeof(padding)>::padding_size,
Chris@16 100 padding_mask = padding3<sizeof(padding)>::padding_mask
Chris@16 101 };
Chris@16 102
Chris@16 103 //
Chris@16 104 // class raw_storage
Chris@16 105 // basically this is a simplified vector<unsigned char>
Chris@16 106 // this is used by basic_regex for expression storage
Chris@16 107 //
Chris@16 108
Chris@16 109 class BOOST_REGEX_DECL raw_storage
Chris@16 110 {
Chris@16 111 public:
Chris@16 112 typedef std::size_t size_type;
Chris@16 113 typedef unsigned char* pointer;
Chris@16 114 private:
Chris@16 115 pointer last, start, end;
Chris@16 116 public:
Chris@16 117
Chris@16 118 raw_storage();
Chris@16 119 raw_storage(size_type n);
Chris@16 120
Chris@16 121 ~raw_storage()
Chris@16 122 {
Chris@16 123 ::operator delete(start);
Chris@16 124 }
Chris@16 125
Chris@16 126 void BOOST_REGEX_CALL resize(size_type n);
Chris@16 127
Chris@16 128 void* BOOST_REGEX_CALL extend(size_type n)
Chris@16 129 {
Chris@16 130 if(size_type(last - end) < n)
Chris@16 131 resize(n + (end - start));
Chris@101 132 pointer result = end;
Chris@16 133 end += n;
Chris@16 134 return result;
Chris@16 135 }
Chris@16 136
Chris@16 137 void* BOOST_REGEX_CALL insert(size_type pos, size_type n);
Chris@16 138
Chris@16 139 size_type BOOST_REGEX_CALL size()
Chris@16 140 {
Chris@16 141 return end - start;
Chris@16 142 }
Chris@16 143
Chris@16 144 size_type BOOST_REGEX_CALL capacity()
Chris@16 145 {
Chris@16 146 return last - start;
Chris@16 147 }
Chris@16 148
Chris@16 149 void* BOOST_REGEX_CALL data()const
Chris@16 150 {
Chris@16 151 return start;
Chris@16 152 }
Chris@16 153
Chris@16 154 size_type BOOST_REGEX_CALL index(void* ptr)
Chris@16 155 {
Chris@16 156 return static_cast<pointer>(ptr) - static_cast<pointer>(data());
Chris@16 157 }
Chris@16 158
Chris@16 159 void BOOST_REGEX_CALL clear()
Chris@16 160 {
Chris@16 161 end = start;
Chris@16 162 }
Chris@16 163
Chris@16 164 void BOOST_REGEX_CALL align()
Chris@16 165 {
Chris@16 166 // move end up to a boundary:
Chris@16 167 end = start + (((end - start) + padding_mask) & ~padding_mask);
Chris@16 168 }
Chris@16 169 void swap(raw_storage& that)
Chris@16 170 {
Chris@16 171 std::swap(start, that.start);
Chris@16 172 std::swap(end, that.end);
Chris@16 173 std::swap(last, that.last);
Chris@16 174 }
Chris@16 175 };
Chris@16 176
Chris@16 177 inline raw_storage::raw_storage()
Chris@16 178 {
Chris@16 179 last = start = end = 0;
Chris@16 180 }
Chris@16 181
Chris@16 182 inline raw_storage::raw_storage(size_type n)
Chris@16 183 {
Chris@16 184 start = end = static_cast<pointer>(::operator new(n));
Chris@16 185 BOOST_REGEX_NOEH_ASSERT(start)
Chris@16 186 last = start + n;
Chris@16 187 }
Chris@16 188
Chris@16 189
Chris@16 190 #ifdef BOOST_MSVC
Chris@16 191 #pragma warning(push)
Chris@16 192 #pragma warning(disable: 4103)
Chris@16 193 #endif
Chris@16 194 #ifdef BOOST_HAS_ABI_HEADERS
Chris@16 195 # include BOOST_ABI_SUFFIX
Chris@16 196 #endif
Chris@16 197 #ifdef BOOST_MSVC
Chris@16 198 #pragma warning(pop)
Chris@16 199 #endif
Chris@16 200
Chris@16 201 } // namespace re_detail
Chris@16 202 } // namespace boost
Chris@16 203
Chris@16 204 #endif
Chris@16 205
Chris@16 206
Chris@16 207
Chris@16 208
Chris@16 209
Chris@16 210