annotate DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/impl/chset.ipp @ 21:ee6b7d71155b

Some os/x build fixes
author Chris Cannam
date Tue, 05 Aug 2014 12:55:55 +0100
parents 2665513ce2d3
children c530137014c0
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2003 Joel de Guzman
Chris@16 3 Copyright (c) 2001-2003 Daniel Nuffer
Chris@16 4 http://spirit.sourceforge.net/
Chris@16 5
Chris@16 6 Use, modification and distribution is subject to the Boost Software
Chris@16 7 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 8 http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 =============================================================================*/
Chris@16 10 #ifndef BOOST_SPIRIT_CHSET_IPP
Chris@16 11 #define BOOST_SPIRIT_CHSET_IPP
Chris@16 12
Chris@16 13 ///////////////////////////////////////////////////////////////////////////////
Chris@16 14 #include <boost/limits.hpp>
Chris@16 15 #include <boost/spirit/home/classic/utility/chset.hpp>
Chris@16 16
Chris@16 17 ///////////////////////////////////////////////////////////////////////////////
Chris@16 18 namespace boost { namespace spirit {
Chris@16 19
Chris@16 20 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
Chris@16 21
Chris@16 22 ///////////////////////////////////////////////////////////////////////////////
Chris@16 23 //
Chris@16 24 // chset class
Chris@16 25 //
Chris@16 26 ///////////////////////////////////////////////////////////////////////////////
Chris@16 27 namespace utility { namespace impl {
Chris@16 28 template <typename CharT>
Chris@16 29 inline void
Chris@16 30 detach(boost::shared_ptr<basic_chset<CharT> >& ptr)
Chris@16 31 {
Chris@16 32 if (!ptr.unique())
Chris@16 33 ptr = boost::shared_ptr<basic_chset<CharT> >
Chris@16 34 (new basic_chset<CharT>(*ptr));
Chris@16 35 }
Chris@16 36
Chris@16 37 template <typename CharT>
Chris@16 38 inline void
Chris@16 39 detach_clear(boost::shared_ptr<basic_chset<CharT> >& ptr)
Chris@16 40 {
Chris@16 41 if (ptr.unique())
Chris@16 42 ptr->clear();
Chris@16 43 else
Chris@16 44 ptr.reset(new basic_chset<CharT>());
Chris@16 45 }
Chris@16 46
Chris@16 47 template <typename CharT, typename CharT2>
Chris@16 48 void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
Chris@16 49 CharT2 const* definition)
Chris@16 50 {
Chris@16 51 CharT2 ch = *definition++;
Chris@16 52 while (ch)
Chris@16 53 {
Chris@16 54 CharT2 next = *definition++;
Chris@16 55 if (next == '-')
Chris@16 56 {
Chris@16 57 next = *definition++;
Chris@16 58 if (next == 0)
Chris@16 59 {
Chris@16 60 ptr->set(ch);
Chris@16 61 ptr->set('-');
Chris@16 62 break;
Chris@16 63 }
Chris@16 64 ptr->set(ch, next);
Chris@16 65 }
Chris@16 66 else
Chris@16 67 {
Chris@16 68 ptr->set(ch);
Chris@16 69 }
Chris@16 70 ch = next;
Chris@16 71 }
Chris@16 72 }
Chris@16 73
Chris@16 74 //////////////////////////////////
Chris@16 75
Chris@16 76 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 77
Chris@16 78 template <typename CharT, typename FakeT>
Chris@16 79 void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr, chlit<CharT> const &ch,
Chris@16 80 FakeT)
Chris@16 81 {
Chris@16 82 if(ch.ch != (std::numeric_limits<CharT>::min)()) {
Chris@16 83 ptr->set((std::numeric_limits<CharT>::min)(), ch.ch - 1);
Chris@16 84 }
Chris@16 85 if(ch.ch != (std::numeric_limits<CharT>::max)()) {
Chris@16 86 ptr->set(ch.ch + 1, (std::numeric_limits<CharT>::max)());
Chris@16 87 }
Chris@16 88 }
Chris@16 89
Chris@16 90 template <typename CharT, typename FakeT>
Chris@16 91 void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr,
Chris@16 92 spirit::range<CharT> const &rng, FakeT)
Chris@16 93 {
Chris@16 94 if(rng.first != (std::numeric_limits<CharT>::min)()) {
Chris@16 95 ptr->set((std::numeric_limits<CharT>::min)(), rng.first - 1);
Chris@16 96 }
Chris@16 97 if(rng.last != (std::numeric_limits<CharT>::max)()) {
Chris@16 98 ptr->set(rng.last + 1, (std::numeric_limits<CharT>::max)());
Chris@16 99 }
Chris@16 100 }
Chris@16 101
Chris@16 102 #endif // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 103
Chris@16 104 //////////////////////////////////
Chris@16 105
Chris@16 106 }} // namespace utility::impl
Chris@16 107
Chris@16 108 template <typename CharT>
Chris@16 109 inline chset<CharT>::chset()
Chris@16 110 : ptr(new basic_chset<CharT>()) {}
Chris@16 111
Chris@16 112 template <typename CharT>
Chris@16 113 inline chset<CharT>::chset(chset const& arg_)
Chris@16 114 : ptr(new basic_chset<CharT>(*arg_.ptr)) {}
Chris@16 115
Chris@16 116 template <typename CharT>
Chris@16 117 inline chset<CharT>::chset(CharT arg_)
Chris@16 118 : ptr(new basic_chset<CharT>())
Chris@16 119 { ptr->set(arg_); }
Chris@16 120
Chris@16 121 template <typename CharT>
Chris@16 122 inline chset<CharT>::chset(anychar_parser /*arg*/)
Chris@16 123 : ptr(new basic_chset<CharT>())
Chris@16 124 {
Chris@16 125 ptr->set(
Chris@16 126 (std::numeric_limits<CharT>::min)(),
Chris@16 127 (std::numeric_limits<CharT>::max)()
Chris@16 128 );
Chris@16 129 }
Chris@16 130
Chris@16 131 template <typename CharT>
Chris@16 132 inline chset<CharT>::chset(nothing_parser arg_)
Chris@16 133 : ptr(new basic_chset<CharT>()) {}
Chris@16 134
Chris@16 135 template <typename CharT>
Chris@16 136 inline chset<CharT>::chset(chlit<CharT> const& arg_)
Chris@16 137 : ptr(new basic_chset<CharT>())
Chris@16 138 { ptr->set(arg_.ch); }
Chris@16 139
Chris@16 140 template <typename CharT>
Chris@16 141 inline chset<CharT>::chset(range<CharT> const& arg_)
Chris@16 142 : ptr(new basic_chset<CharT>())
Chris@16 143 { ptr->set(arg_.first, arg_.last); }
Chris@16 144
Chris@16 145 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 146
Chris@16 147 template <typename CharT>
Chris@16 148 inline chset<CharT>::chset(negated_char_parser<chlit<CharT> > const& arg_)
Chris@16 149 : ptr(new basic_chset<CharT>())
Chris@16 150 {
Chris@16 151 set(arg_);
Chris@16 152 }
Chris@16 153
Chris@16 154 template <typename CharT>
Chris@16 155 inline chset<CharT>::chset(negated_char_parser<range<CharT> > const& arg_)
Chris@16 156 : ptr(new basic_chset<CharT>())
Chris@16 157 {
Chris@16 158 set(arg_);
Chris@16 159 }
Chris@16 160
Chris@16 161 #endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 162
Chris@16 163 template <typename CharT>
Chris@16 164 inline chset<CharT>::~chset() {}
Chris@16 165
Chris@16 166 template <typename CharT>
Chris@16 167 inline chset<CharT>&
Chris@16 168 chset<CharT>::operator=(chset const& rhs)
Chris@16 169 {
Chris@16 170 ptr = rhs.ptr;
Chris@16 171 return *this;
Chris@16 172 }
Chris@16 173
Chris@16 174 template <typename CharT>
Chris@16 175 inline chset<CharT>&
Chris@16 176 chset<CharT>::operator=(CharT rhs)
Chris@16 177 {
Chris@16 178 utility::impl::detach_clear(ptr);
Chris@16 179 ptr->set(rhs);
Chris@16 180 return *this;
Chris@16 181 }
Chris@16 182
Chris@16 183 template <typename CharT>
Chris@16 184 inline chset<CharT>&
Chris@16 185 chset<CharT>::operator=(anychar_parser rhs)
Chris@16 186 {
Chris@16 187 utility::impl::detach_clear(ptr);
Chris@16 188 ptr->set(
Chris@16 189 (std::numeric_limits<CharT>::min)(),
Chris@16 190 (std::numeric_limits<CharT>::max)()
Chris@16 191 );
Chris@16 192 return *this;
Chris@16 193 }
Chris@16 194
Chris@16 195 template <typename CharT>
Chris@16 196 inline chset<CharT>&
Chris@16 197 chset<CharT>::operator=(nothing_parser rhs)
Chris@16 198 {
Chris@16 199 utility::impl::detach_clear(ptr);
Chris@16 200 return *this;
Chris@16 201 }
Chris@16 202
Chris@16 203 template <typename CharT>
Chris@16 204 inline chset<CharT>&
Chris@16 205 chset<CharT>::operator=(chlit<CharT> const& rhs)
Chris@16 206 {
Chris@16 207 utility::impl::detach_clear(ptr);
Chris@16 208 ptr->set(rhs.ch);
Chris@16 209 return *this;
Chris@16 210 }
Chris@16 211
Chris@16 212 template <typename CharT>
Chris@16 213 inline chset<CharT>&
Chris@16 214 chset<CharT>::operator=(range<CharT> const& rhs)
Chris@16 215 {
Chris@16 216 utility::impl::detach_clear(ptr);
Chris@16 217 ptr->set(rhs.first, rhs.last);
Chris@16 218 return *this;
Chris@16 219 }
Chris@16 220
Chris@16 221 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 222
Chris@16 223 template <typename CharT>
Chris@16 224 inline chset<CharT>&
Chris@16 225 chset<CharT>::operator=(negated_char_parser<chlit<CharT> > const& rhs)
Chris@16 226 {
Chris@16 227 utility::impl::detach_clear(ptr);
Chris@16 228 set(rhs);
Chris@16 229 return *this;
Chris@16 230 }
Chris@16 231
Chris@16 232 template <typename CharT>
Chris@16 233 inline chset<CharT>&
Chris@16 234 chset<CharT>::operator=(negated_char_parser<range<CharT> > const& rhs)
Chris@16 235 {
Chris@16 236 utility::impl::detach_clear(ptr);
Chris@16 237 set(rhs);
Chris@16 238 return *this;
Chris@16 239 }
Chris@16 240
Chris@16 241 #endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 242
Chris@16 243 template <typename CharT>
Chris@16 244 inline void
Chris@16 245 chset<CharT>::set(range<CharT> const& arg_)
Chris@16 246 {
Chris@16 247 utility::impl::detach(ptr);
Chris@16 248 ptr->set(arg_.first, arg_.last);
Chris@16 249 }
Chris@16 250
Chris@16 251 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 252
Chris@16 253 template <typename CharT>
Chris@16 254 inline void
Chris@16 255 chset<CharT>::set(negated_char_parser<chlit<CharT> > const& arg_)
Chris@16 256 {
Chris@16 257 utility::impl::detach(ptr);
Chris@16 258
Chris@16 259 if(arg_.positive.ch != (std::numeric_limits<CharT>::min)()) {
Chris@16 260 ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.ch - 1);
Chris@16 261 }
Chris@16 262 if(arg_.positive.ch != (std::numeric_limits<CharT>::max)()) {
Chris@16 263 ptr->set(arg_.positive.ch + 1, (std::numeric_limits<CharT>::max)());
Chris@16 264 }
Chris@16 265 }
Chris@16 266
Chris@16 267 template <typename CharT>
Chris@16 268 inline void
Chris@16 269 chset<CharT>::set(negated_char_parser<range<CharT> > const& arg_)
Chris@16 270 {
Chris@16 271 utility::impl::detach(ptr);
Chris@16 272
Chris@16 273 if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
Chris@16 274 ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
Chris@16 275 }
Chris@16 276 if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
Chris@16 277 ptr->set(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
Chris@16 278 }
Chris@16 279 }
Chris@16 280
Chris@16 281 #endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Chris@16 282
Chris@16 283 template <typename CharT>
Chris@16 284 inline void
Chris@16 285 chset<CharT>::clear(range<CharT> const& arg_)
Chris@16 286 {
Chris@16 287 utility::impl::detach(ptr);
Chris@16 288 ptr->clear(arg_.first, arg_.last);
Chris@16 289 }
Chris@16 290
Chris@16 291 template <typename CharT>
Chris@16 292 inline void
Chris@16 293 chset<CharT>::clear(negated_char_parser<range<CharT> > const& arg_)
Chris@16 294 {
Chris@16 295 utility::impl::detach(ptr);
Chris@16 296
Chris@16 297 if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
Chris@16 298 ptr->clear((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
Chris@16 299 }
Chris@16 300 if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
Chris@16 301 ptr->clear(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
Chris@16 302 }
Chris@16 303 }
Chris@16 304
Chris@16 305 template <typename CharT>
Chris@16 306 inline bool
Chris@16 307 chset<CharT>::test(CharT ch) const
Chris@16 308 { return ptr->test(ch); }
Chris@16 309
Chris@16 310 template <typename CharT>
Chris@16 311 inline chset<CharT>&
Chris@16 312 chset<CharT>::inverse()
Chris@16 313 {
Chris@16 314 utility::impl::detach(ptr);
Chris@16 315 ptr->inverse();
Chris@16 316 return *this;
Chris@16 317 }
Chris@16 318
Chris@16 319 template <typename CharT>
Chris@16 320 inline void
Chris@16 321 chset<CharT>::swap(chset& x)
Chris@16 322 { ptr.swap(x.ptr); }
Chris@16 323
Chris@16 324 template <typename CharT>
Chris@16 325 inline chset<CharT>&
Chris@16 326 chset<CharT>::operator|=(chset const& x)
Chris@16 327 {
Chris@16 328 utility::impl::detach(ptr);
Chris@16 329 *ptr |= *x.ptr;
Chris@16 330 return *this;
Chris@16 331 }
Chris@16 332
Chris@16 333 template <typename CharT>
Chris@16 334 inline chset<CharT>&
Chris@16 335 chset<CharT>::operator&=(chset const& x)
Chris@16 336 {
Chris@16 337 utility::impl::detach(ptr);
Chris@16 338 *ptr &= *x.ptr;
Chris@16 339 return *this;
Chris@16 340 }
Chris@16 341
Chris@16 342 template <typename CharT>
Chris@16 343 inline chset<CharT>&
Chris@16 344 chset<CharT>::operator-=(chset const& x)
Chris@16 345 {
Chris@16 346 utility::impl::detach(ptr);
Chris@16 347 *ptr -= *x.ptr;
Chris@16 348 return *this;
Chris@16 349 }
Chris@16 350
Chris@16 351 template <typename CharT>
Chris@16 352 inline chset<CharT>&
Chris@16 353 chset<CharT>::operator^=(chset const& x)
Chris@16 354 {
Chris@16 355 utility::impl::detach(ptr);
Chris@16 356 *ptr ^= *x.ptr;
Chris@16 357 return *this;
Chris@16 358 }
Chris@16 359
Chris@16 360 ///////////////////////////////////////////////////////////////////////////////
Chris@16 361 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
Chris@16 362
Chris@16 363 }} // namespace boost::spirit
Chris@16 364
Chris@16 365 #endif
Chris@16 366