annotate DEPENDENCIES/generic/include/boost/xpressive/detail/utility/chset/basic_chset.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 2665513ce2d3
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_XPRESSIVE_SPIRIT_BASIC_CHSET_HPP_EAN_10_04_2005
Chris@16 11 #define BOOST_XPRESSIVE_SPIRIT_BASIC_CHSET_HPP_EAN_10_04_2005
Chris@16 12
Chris@16 13 ///////////////////////////////////////////////////////////////////////////////
Chris@16 14 #include <bitset>
Chris@16 15 #include <boost/mpl/bool.hpp>
Chris@16 16 #include <boost/xpressive/detail/utility/chset/range_run.ipp>
Chris@16 17
Chris@16 18 namespace boost { namespace xpressive { namespace detail
Chris@16 19 {
Chris@16 20
Chris@16 21 ///////////////////////////////////////////////////////////////////////////
Chris@16 22 //
Chris@16 23 // basic_chset: basic character set implementation using range_run
Chris@16 24 //
Chris@16 25 ///////////////////////////////////////////////////////////////////////////
Chris@16 26 template<typename Char>
Chris@16 27 struct basic_chset
Chris@16 28 {
Chris@16 29 basic_chset();
Chris@16 30 basic_chset(basic_chset const &arg);
Chris@16 31
Chris@16 32 bool empty() const;
Chris@16 33 void set(Char from, Char to);
Chris@16 34 template<typename Traits>
Chris@16 35 void set(Char from, Char to, Traits const &tr);
Chris@16 36 void set(Char c);
Chris@16 37 template<typename Traits>
Chris@16 38 void set(Char c, Traits const &tr);
Chris@16 39
Chris@16 40 void clear(Char from, Char to);
Chris@16 41 template<typename Traits>
Chris@16 42 void clear(Char from, Char to, Traits const &tr);
Chris@16 43 void clear(Char c);
Chris@16 44 template<typename Traits>
Chris@16 45 void clear(Char c, Traits const &tr);
Chris@16 46 void clear();
Chris@16 47
Chris@16 48 template<typename Traits>
Chris@16 49 bool test(Char v, Traits const &tr, mpl::false_) const; // case-sensitive
Chris@16 50 template<typename Traits>
Chris@16 51 bool test(Char v, Traits const &tr, mpl::true_) const; // case-insensitive
Chris@16 52
Chris@16 53 void inverse();
Chris@16 54 void swap(basic_chset& x);
Chris@16 55
Chris@16 56 basic_chset &operator |=(basic_chset const &x);
Chris@16 57 basic_chset &operator &=(basic_chset const &x);
Chris@16 58 basic_chset &operator -=(basic_chset const &x);
Chris@16 59 basic_chset &operator ^=(basic_chset const &x);
Chris@16 60
Chris@16 61 private:
Chris@16 62 range_run<Char> rr_;
Chris@16 63 };
Chris@16 64
Chris@16 65 #if(CHAR_BIT == 8)
Chris@16 66
Chris@16 67 ///////////////////////////////////////////////////////////////////////////
Chris@16 68 //
Chris@16 69 // basic_chset: specializations for 8 bit chars using std::bitset
Chris@16 70 //
Chris@16 71 ///////////////////////////////////////////////////////////////////////////
Chris@16 72 template<typename Char>
Chris@16 73 struct basic_chset_8bit
Chris@16 74 {
Chris@16 75 basic_chset_8bit();
Chris@16 76 basic_chset_8bit(basic_chset_8bit const &arg);
Chris@16 77
Chris@16 78 bool empty() const;
Chris@16 79
Chris@16 80 void set(Char from, Char to);
Chris@16 81 template<typename Traits>
Chris@16 82 void set(Char from, Char to, Traits const &tr);
Chris@16 83 void set(Char c);
Chris@16 84 template<typename Traits>
Chris@16 85 void set(Char c, Traits const &tr);
Chris@16 86
Chris@16 87 void clear(Char from, Char to);
Chris@16 88 template<typename Traits>
Chris@16 89 void clear(Char from, Char to, Traits const &tr);
Chris@16 90 void clear(Char c);
Chris@16 91 template<typename Traits>
Chris@16 92 void clear(Char c, Traits const &tr);
Chris@16 93 void clear();
Chris@16 94
Chris@16 95 template<typename Traits>
Chris@16 96 bool test(Char v, Traits const &tr, mpl::false_) const; // case-sensitive
Chris@16 97 template<typename Traits>
Chris@16 98 bool test(Char v, Traits const &tr, mpl::true_) const; // case-insensitive
Chris@16 99
Chris@16 100 void inverse();
Chris@16 101 void swap(basic_chset_8bit& x);
Chris@16 102
Chris@16 103 basic_chset_8bit &operator |=(basic_chset_8bit const &x);
Chris@16 104 basic_chset_8bit &operator &=(basic_chset_8bit const &x);
Chris@16 105 basic_chset_8bit &operator -=(basic_chset_8bit const &x);
Chris@16 106 basic_chset_8bit &operator ^=(basic_chset_8bit const &x);
Chris@16 107
Chris@16 108 std::bitset<256> const &base() const;
Chris@16 109
Chris@16 110 private:
Chris@16 111 std::bitset<256> bset_; // BUGBUG range-checking slows this down
Chris@16 112 };
Chris@16 113
Chris@16 114 /////////////////////////////////
Chris@16 115 template<>
Chris@16 116 struct basic_chset<char>
Chris@16 117 : basic_chset_8bit<char>
Chris@16 118 {
Chris@16 119 };
Chris@16 120
Chris@16 121 /////////////////////////////////
Chris@16 122 template<>
Chris@16 123 struct basic_chset<signed char>
Chris@16 124 : basic_chset_8bit<signed char>
Chris@16 125 {
Chris@16 126 };
Chris@16 127
Chris@16 128 /////////////////////////////////
Chris@16 129 template<>
Chris@16 130 struct basic_chset<unsigned char>
Chris@16 131 : basic_chset_8bit<unsigned char>
Chris@16 132 {
Chris@16 133 };
Chris@16 134
Chris@16 135 #endif
Chris@16 136
Chris@16 137 ///////////////////////////////////////////////////////////////////////////////
Chris@16 138 // is_narrow_char
Chris@16 139 template<typename Char>
Chris@16 140 struct is_narrow_char
Chris@16 141 : mpl::false_
Chris@16 142 {};
Chris@16 143
Chris@16 144 template<>
Chris@16 145 struct is_narrow_char<char>
Chris@16 146 : mpl::true_
Chris@16 147 {};
Chris@16 148
Chris@16 149 template<>
Chris@16 150 struct is_narrow_char<signed char>
Chris@16 151 : mpl::true_
Chris@16 152 {};
Chris@16 153
Chris@16 154 template<>
Chris@16 155 struct is_narrow_char<unsigned char>
Chris@16 156 : mpl::true_
Chris@16 157 {};
Chris@16 158
Chris@16 159 ///////////////////////////////////////////////////////////////////////////////
Chris@16 160 // helpers
Chris@16 161 template<typename Char, typename Traits>
Chris@16 162 void set_char(basic_chset<Char> &chset, Char ch, Traits const &tr, bool icase);
Chris@16 163
Chris@16 164 template<typename Char, typename Traits>
Chris@16 165 void set_range(basic_chset<Char> &chset, Char from, Char to, Traits const &tr, bool icase);
Chris@16 166
Chris@16 167 template<typename Char, typename Traits>
Chris@16 168 void set_class(basic_chset<Char> &chset, typename Traits::char_class_type char_class, bool no, Traits const &tr);
Chris@16 169
Chris@16 170 }}} // namespace boost::xpressive::detail
Chris@16 171
Chris@16 172 #endif