annotate DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/impl/chset.ipp @ 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 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 }} // namespace utility::impl
Chris@16 75
Chris@16 76 template <typename CharT>
Chris@16 77 inline chset<CharT>::chset()
Chris@16 78 : ptr(new basic_chset<CharT>()) {}
Chris@16 79
Chris@16 80 template <typename CharT>
Chris@16 81 inline chset<CharT>::chset(chset const& arg_)
Chris@16 82 : ptr(new basic_chset<CharT>(*arg_.ptr)) {}
Chris@16 83
Chris@16 84 template <typename CharT>
Chris@16 85 inline chset<CharT>::chset(CharT arg_)
Chris@16 86 : ptr(new basic_chset<CharT>())
Chris@16 87 { ptr->set(arg_); }
Chris@16 88
Chris@16 89 template <typename CharT>
Chris@16 90 inline chset<CharT>::chset(anychar_parser /*arg*/)
Chris@16 91 : ptr(new basic_chset<CharT>())
Chris@16 92 {
Chris@16 93 ptr->set(
Chris@16 94 (std::numeric_limits<CharT>::min)(),
Chris@16 95 (std::numeric_limits<CharT>::max)()
Chris@16 96 );
Chris@16 97 }
Chris@16 98
Chris@16 99 template <typename CharT>
Chris@16 100 inline chset<CharT>::chset(nothing_parser arg_)
Chris@16 101 : ptr(new basic_chset<CharT>()) {}
Chris@16 102
Chris@16 103 template <typename CharT>
Chris@16 104 inline chset<CharT>::chset(chlit<CharT> const& arg_)
Chris@16 105 : ptr(new basic_chset<CharT>())
Chris@16 106 { ptr->set(arg_.ch); }
Chris@16 107
Chris@16 108 template <typename CharT>
Chris@16 109 inline chset<CharT>::chset(range<CharT> const& arg_)
Chris@16 110 : ptr(new basic_chset<CharT>())
Chris@16 111 { ptr->set(arg_.first, arg_.last); }
Chris@16 112
Chris@16 113 template <typename CharT>
Chris@16 114 inline chset<CharT>::chset(negated_char_parser<chlit<CharT> > const& arg_)
Chris@16 115 : ptr(new basic_chset<CharT>())
Chris@16 116 {
Chris@16 117 set(arg_);
Chris@16 118 }
Chris@16 119
Chris@16 120 template <typename CharT>
Chris@16 121 inline chset<CharT>::chset(negated_char_parser<range<CharT> > const& arg_)
Chris@16 122 : ptr(new basic_chset<CharT>())
Chris@16 123 {
Chris@16 124 set(arg_);
Chris@16 125 }
Chris@16 126
Chris@16 127 template <typename CharT>
Chris@16 128 inline chset<CharT>::~chset() {}
Chris@16 129
Chris@16 130 template <typename CharT>
Chris@16 131 inline chset<CharT>&
Chris@16 132 chset<CharT>::operator=(chset const& rhs)
Chris@16 133 {
Chris@16 134 ptr = rhs.ptr;
Chris@16 135 return *this;
Chris@16 136 }
Chris@16 137
Chris@16 138 template <typename CharT>
Chris@16 139 inline chset<CharT>&
Chris@16 140 chset<CharT>::operator=(CharT rhs)
Chris@16 141 {
Chris@16 142 utility::impl::detach_clear(ptr);
Chris@16 143 ptr->set(rhs);
Chris@16 144 return *this;
Chris@16 145 }
Chris@16 146
Chris@16 147 template <typename CharT>
Chris@16 148 inline chset<CharT>&
Chris@16 149 chset<CharT>::operator=(anychar_parser rhs)
Chris@16 150 {
Chris@16 151 utility::impl::detach_clear(ptr);
Chris@16 152 ptr->set(
Chris@16 153 (std::numeric_limits<CharT>::min)(),
Chris@16 154 (std::numeric_limits<CharT>::max)()
Chris@16 155 );
Chris@16 156 return *this;
Chris@16 157 }
Chris@16 158
Chris@16 159 template <typename CharT>
Chris@16 160 inline chset<CharT>&
Chris@16 161 chset<CharT>::operator=(nothing_parser rhs)
Chris@16 162 {
Chris@16 163 utility::impl::detach_clear(ptr);
Chris@16 164 return *this;
Chris@16 165 }
Chris@16 166
Chris@16 167 template <typename CharT>
Chris@16 168 inline chset<CharT>&
Chris@16 169 chset<CharT>::operator=(chlit<CharT> const& rhs)
Chris@16 170 {
Chris@16 171 utility::impl::detach_clear(ptr);
Chris@16 172 ptr->set(rhs.ch);
Chris@16 173 return *this;
Chris@16 174 }
Chris@16 175
Chris@16 176 template <typename CharT>
Chris@16 177 inline chset<CharT>&
Chris@16 178 chset<CharT>::operator=(range<CharT> const& rhs)
Chris@16 179 {
Chris@16 180 utility::impl::detach_clear(ptr);
Chris@16 181 ptr->set(rhs.first, rhs.last);
Chris@16 182 return *this;
Chris@16 183 }
Chris@16 184
Chris@16 185 template <typename CharT>
Chris@16 186 inline chset<CharT>&
Chris@16 187 chset<CharT>::operator=(negated_char_parser<chlit<CharT> > const& rhs)
Chris@16 188 {
Chris@16 189 utility::impl::detach_clear(ptr);
Chris@16 190 set(rhs);
Chris@16 191 return *this;
Chris@16 192 }
Chris@16 193
Chris@16 194 template <typename CharT>
Chris@16 195 inline chset<CharT>&
Chris@16 196 chset<CharT>::operator=(negated_char_parser<range<CharT> > const& rhs)
Chris@16 197 {
Chris@16 198 utility::impl::detach_clear(ptr);
Chris@16 199 set(rhs);
Chris@16 200 return *this;
Chris@16 201 }
Chris@16 202
Chris@16 203 template <typename CharT>
Chris@16 204 inline void
Chris@16 205 chset<CharT>::set(range<CharT> const& arg_)
Chris@16 206 {
Chris@16 207 utility::impl::detach(ptr);
Chris@16 208 ptr->set(arg_.first, arg_.last);
Chris@16 209 }
Chris@16 210
Chris@16 211 template <typename CharT>
Chris@16 212 inline void
Chris@16 213 chset<CharT>::set(negated_char_parser<chlit<CharT> > const& arg_)
Chris@16 214 {
Chris@16 215 utility::impl::detach(ptr);
Chris@16 216
Chris@16 217 if(arg_.positive.ch != (std::numeric_limits<CharT>::min)()) {
Chris@16 218 ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.ch - 1);
Chris@16 219 }
Chris@16 220 if(arg_.positive.ch != (std::numeric_limits<CharT>::max)()) {
Chris@16 221 ptr->set(arg_.positive.ch + 1, (std::numeric_limits<CharT>::max)());
Chris@16 222 }
Chris@16 223 }
Chris@16 224
Chris@16 225 template <typename CharT>
Chris@16 226 inline void
Chris@16 227 chset<CharT>::set(negated_char_parser<range<CharT> > const& arg_)
Chris@16 228 {
Chris@16 229 utility::impl::detach(ptr);
Chris@16 230
Chris@16 231 if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
Chris@16 232 ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
Chris@16 233 }
Chris@16 234 if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
Chris@16 235 ptr->set(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
Chris@16 236 }
Chris@16 237 }
Chris@16 238
Chris@16 239 template <typename CharT>
Chris@16 240 inline void
Chris@16 241 chset<CharT>::clear(range<CharT> const& arg_)
Chris@16 242 {
Chris@16 243 utility::impl::detach(ptr);
Chris@16 244 ptr->clear(arg_.first, arg_.last);
Chris@16 245 }
Chris@16 246
Chris@16 247 template <typename CharT>
Chris@16 248 inline void
Chris@16 249 chset<CharT>::clear(negated_char_parser<range<CharT> > const& arg_)
Chris@16 250 {
Chris@16 251 utility::impl::detach(ptr);
Chris@16 252
Chris@16 253 if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
Chris@16 254 ptr->clear((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
Chris@16 255 }
Chris@16 256 if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
Chris@16 257 ptr->clear(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
Chris@16 258 }
Chris@16 259 }
Chris@16 260
Chris@16 261 template <typename CharT>
Chris@16 262 inline bool
Chris@16 263 chset<CharT>::test(CharT ch) const
Chris@16 264 { return ptr->test(ch); }
Chris@16 265
Chris@16 266 template <typename CharT>
Chris@16 267 inline chset<CharT>&
Chris@16 268 chset<CharT>::inverse()
Chris@16 269 {
Chris@16 270 utility::impl::detach(ptr);
Chris@16 271 ptr->inverse();
Chris@16 272 return *this;
Chris@16 273 }
Chris@16 274
Chris@16 275 template <typename CharT>
Chris@16 276 inline void
Chris@16 277 chset<CharT>::swap(chset& x)
Chris@16 278 { ptr.swap(x.ptr); }
Chris@16 279
Chris@16 280 template <typename CharT>
Chris@16 281 inline chset<CharT>&
Chris@16 282 chset<CharT>::operator|=(chset const& x)
Chris@16 283 {
Chris@16 284 utility::impl::detach(ptr);
Chris@16 285 *ptr |= *x.ptr;
Chris@16 286 return *this;
Chris@16 287 }
Chris@16 288
Chris@16 289 template <typename CharT>
Chris@16 290 inline chset<CharT>&
Chris@16 291 chset<CharT>::operator&=(chset const& x)
Chris@16 292 {
Chris@16 293 utility::impl::detach(ptr);
Chris@16 294 *ptr &= *x.ptr;
Chris@16 295 return *this;
Chris@16 296 }
Chris@16 297
Chris@16 298 template <typename CharT>
Chris@16 299 inline chset<CharT>&
Chris@16 300 chset<CharT>::operator-=(chset const& x)
Chris@16 301 {
Chris@16 302 utility::impl::detach(ptr);
Chris@16 303 *ptr -= *x.ptr;
Chris@16 304 return *this;
Chris@16 305 }
Chris@16 306
Chris@16 307 template <typename CharT>
Chris@16 308 inline chset<CharT>&
Chris@16 309 chset<CharT>::operator^=(chset const& x)
Chris@16 310 {
Chris@16 311 utility::impl::detach(ptr);
Chris@16 312 *ptr ^= *x.ptr;
Chris@16 313 return *this;
Chris@16 314 }
Chris@16 315
Chris@16 316 ///////////////////////////////////////////////////////////////////////////////
Chris@16 317 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
Chris@16 318
Chris@16 319 }} // namespace boost::spirit
Chris@16 320
Chris@16 321 #endif
Chris@16 322