annotate DEPENDENCIES/generic/include/boost/spirit/home/support/char_set/basic_chset.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2011 Joel de Guzman
Chris@16 3 Copyright (c) 2001-2009 Daniel Nuffer
Chris@16 4 http://spirit.sourceforge.net/
Chris@16 5
Chris@16 6 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 =============================================================================*/
Chris@16 9 #ifndef BOOST_SPIRIT_BASIC_CHSET_APRIL_17_2008
Chris@16 10 #define BOOST_SPIRIT_BASIC_CHSET_APRIL_17_2008
Chris@16 11
Chris@16 12 #if defined(_MSC_VER)
Chris@16 13 #pragma once
Chris@16 14 #endif
Chris@16 15
Chris@16 16 ///////////////////////////////////////////////////////////////////////////////
Chris@16 17 #include <bitset>
Chris@16 18 #include <climits>
Chris@16 19 #include <boost/spirit/home/support/char_set/range_run.hpp>
Chris@16 20
Chris@16 21 namespace boost { namespace spirit { namespace support { namespace detail
Chris@16 22 {
Chris@16 23 ///////////////////////////////////////////////////////////////////////////
Chris@16 24 //
Chris@16 25 // basic_chset: basic character set implementation using range_run
Chris@16 26 //
Chris@16 27 ///////////////////////////////////////////////////////////////////////////
Chris@16 28 template <typename Char>
Chris@16 29 struct basic_chset
Chris@16 30 {
Chris@16 31 basic_chset() {}
Chris@16 32 basic_chset(basic_chset const& arg_)
Chris@16 33 : rr(arg_.rr) {}
Chris@16 34
Chris@16 35 bool
Chris@16 36 test(Char v) const
Chris@16 37 {
Chris@16 38 return rr.test(v);
Chris@16 39 }
Chris@16 40
Chris@16 41 void
Chris@16 42 set(Char from, Char to)
Chris@16 43 {
Chris@16 44 rr.set(range<Char>(from, to));
Chris@16 45 }
Chris@16 46
Chris@16 47 void
Chris@16 48 set(Char c)
Chris@16 49 {
Chris@16 50 rr.set(range<Char>(c, c));
Chris@16 51 }
Chris@16 52
Chris@16 53 void
Chris@16 54 clear(Char from, Char to)
Chris@16 55 {
Chris@16 56 rr.clear(range<Char>(from, to));
Chris@16 57 }
Chris@16 58
Chris@16 59 void
Chris@16 60 clear(Char c)
Chris@16 61 {
Chris@16 62 rr.clear(range<Char>(c, c));
Chris@16 63 }
Chris@16 64
Chris@16 65 void
Chris@16 66 clear()
Chris@16 67 {
Chris@16 68 rr.clear();
Chris@16 69 }
Chris@16 70
Chris@16 71 void
Chris@16 72 inverse()
Chris@16 73 {
Chris@16 74 basic_chset inv;
Chris@16 75 inv.set(
Chris@16 76 (std::numeric_limits<Char>::min)(),
Chris@16 77 (std::numeric_limits<Char>::max)()
Chris@16 78 );
Chris@16 79 inv -= *this;
Chris@16 80 swap(inv);
Chris@16 81 }
Chris@16 82
Chris@16 83 void
Chris@16 84 swap(basic_chset& x)
Chris@16 85 {
Chris@16 86 rr.swap(x.rr);
Chris@16 87 }
Chris@16 88
Chris@16 89
Chris@16 90 basic_chset&
Chris@16 91 operator|=(basic_chset const& x)
Chris@16 92 {
Chris@16 93 typedef typename range_run<Char>::const_iterator const_iterator;
Chris@16 94 for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
Chris@16 95 rr.set(*iter);
Chris@16 96 return *this;
Chris@16 97 }
Chris@16 98
Chris@16 99 basic_chset&
Chris@16 100 operator&=(basic_chset const& x)
Chris@16 101 {
Chris@16 102 basic_chset inv;
Chris@16 103 inv.set(
Chris@16 104 (std::numeric_limits<Char>::min)(),
Chris@16 105 (std::numeric_limits<Char>::max)()
Chris@16 106 );
Chris@16 107 inv -= x;
Chris@16 108 *this -= inv;
Chris@16 109 return *this;
Chris@16 110 }
Chris@16 111
Chris@16 112 basic_chset&
Chris@16 113 operator-=(basic_chset const& x)
Chris@16 114 {
Chris@16 115 typedef typename range_run<Char>::const_iterator const_iterator;
Chris@16 116 for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
Chris@16 117 rr.clear(*iter);
Chris@16 118 return *this;
Chris@16 119 }
Chris@16 120
Chris@16 121 basic_chset&
Chris@16 122 operator^=(basic_chset const& x)
Chris@16 123 {
Chris@16 124 basic_chset bma = x;
Chris@16 125 bma -= *this;
Chris@16 126 *this -= x;
Chris@16 127 *this |= bma;
Chris@16 128 return *this;
Chris@16 129 }
Chris@16 130
Chris@16 131 private: range_run<Char> rr;
Chris@16 132 };
Chris@16 133
Chris@16 134 #if (CHAR_BIT == 8)
Chris@16 135
Chris@16 136 ///////////////////////////////////////////////////////////////////////////
Chris@16 137 //
Chris@16 138 // basic_chset: specializations for 8 bit chars using std::bitset
Chris@16 139 //
Chris@16 140 ///////////////////////////////////////////////////////////////////////////
Chris@16 141 template <typename Char>
Chris@16 142 struct basic_chset_8bit
Chris@16 143 {
Chris@16 144 basic_chset_8bit() {}
Chris@16 145 basic_chset_8bit(basic_chset_8bit const& arg_)
Chris@16 146 : bset(arg_.bset) {}
Chris@16 147
Chris@16 148 bool
Chris@16 149 test(Char v) const
Chris@16 150 {
Chris@16 151 return bset.test((unsigned char)v);
Chris@16 152 }
Chris@16 153
Chris@16 154 void
Chris@16 155 set(Char from, Char to)
Chris@16 156 {
Chris@16 157 for (int i = from; i <= to; ++i)
Chris@16 158 bset.set((unsigned char)i);
Chris@16 159 }
Chris@16 160
Chris@16 161 void
Chris@16 162 set(Char c)
Chris@16 163 {
Chris@16 164 bset.set((unsigned char)c);
Chris@16 165 }
Chris@16 166
Chris@16 167 void
Chris@16 168 clear(Char from, Char to)
Chris@16 169 {
Chris@16 170 for (int i = from; i <= to; ++i)
Chris@16 171 bset.reset((unsigned char)i);
Chris@16 172 }
Chris@16 173
Chris@16 174 void
Chris@16 175 clear(Char c)
Chris@16 176 {
Chris@16 177 bset.reset((unsigned char)c);
Chris@16 178 }
Chris@16 179
Chris@16 180 void
Chris@16 181 clear()
Chris@16 182 {
Chris@16 183 bset.reset();
Chris@16 184 }
Chris@16 185
Chris@16 186 void
Chris@16 187 inverse()
Chris@16 188 {
Chris@16 189 bset.flip();
Chris@16 190 }
Chris@16 191
Chris@16 192 void
Chris@16 193 swap(basic_chset_8bit& x)
Chris@16 194 {
Chris@16 195 std::swap(bset, x.bset);
Chris@16 196 }
Chris@16 197
Chris@16 198 basic_chset_8bit&
Chris@16 199 operator|=(basic_chset_8bit const& x)
Chris@16 200 {
Chris@16 201 bset |= x.bset;
Chris@16 202 return *this;
Chris@16 203 }
Chris@16 204
Chris@16 205 basic_chset_8bit&
Chris@16 206 operator&=(basic_chset_8bit const& x)
Chris@16 207 {
Chris@16 208 bset &= x.bset;
Chris@16 209 return *this;
Chris@16 210 }
Chris@16 211
Chris@16 212 basic_chset_8bit&
Chris@16 213 operator-=(basic_chset_8bit const& x)
Chris@16 214 {
Chris@16 215 bset &= ~x.bset;
Chris@16 216 return *this;
Chris@16 217 }
Chris@16 218
Chris@16 219 basic_chset_8bit&
Chris@16 220 operator^=(basic_chset_8bit const& x)
Chris@16 221 {
Chris@16 222 bset ^= x.bset;
Chris@16 223 return *this;
Chris@16 224 }
Chris@16 225
Chris@16 226 private: std::bitset<256> bset;
Chris@16 227 };
Chris@16 228
Chris@16 229 /////////////////////////////////
Chris@16 230 template <>
Chris@16 231 struct basic_chset<char>
Chris@16 232 : basic_chset_8bit<char> {};
Chris@16 233
Chris@16 234 /////////////////////////////////
Chris@16 235 template <>
Chris@16 236 struct basic_chset<signed char>
Chris@16 237 : basic_chset_8bit<signed char> {};
Chris@16 238
Chris@16 239 /////////////////////////////////
Chris@16 240 template <>
Chris@16 241 struct basic_chset<unsigned char>
Chris@16 242 : basic_chset_8bit<unsigned char> {};
Chris@16 243
Chris@16 244 #endif // #if (CHAR_BIT == 8)
Chris@16 245
Chris@16 246 }}}}
Chris@16 247
Chris@16 248 #endif
Chris@16 249