annotate DEPENDENCIES/generic/include/boost/xpressive/detail/core/finder.hpp @ 132:540eca98552e

Update qm-vamp-plugins metadata
author Chris Cannam
date Tue, 30 Jul 2019 12:06:51 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /// Contains the definition of the basic_regex\<\> class template and its associated helper functions.
Chris@16 2 //
Chris@16 3 // Copyright 2008 Eric Niebler. Distributed under the Boost
Chris@16 4 // Software License, Version 1.0. (See accompanying file
Chris@16 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 #ifndef BOOST_XPRESSIVE_DETAIL_CORE_FINDER_HPP_EAN_10_04_2005
Chris@16 8 #define BOOST_XPRESSIVE_DETAIL_CORE_FINDER_HPP_EAN_10_04_2005
Chris@16 9
Chris@16 10 // MS compatible compilers support #pragma once
Chris@101 11 #if defined(_MSC_VER)
Chris@16 12 # pragma once
Chris@16 13 # pragma warning(push)
Chris@16 14 # pragma warning(disable : 4189) // local variable is initialized but not referenced
Chris@16 15 #endif
Chris@16 16
Chris@16 17 #include <boost/xpressive/detail/detail_fwd.hpp>
Chris@16 18 #include <boost/xpressive/detail/core/regex_impl.hpp>
Chris@16 19 #include <boost/xpressive/detail/utility/boyer_moore.hpp>
Chris@16 20 #include <boost/xpressive/detail/utility/hash_peek_bitset.hpp>
Chris@16 21
Chris@16 22 namespace boost { namespace xpressive { namespace detail
Chris@16 23 {
Chris@16 24
Chris@16 25 ///////////////////////////////////////////////////////////////////////////////
Chris@16 26 // boyer_moore_finder
Chris@16 27 //
Chris@16 28 template<typename BidiIter, typename Traits>
Chris@16 29 struct boyer_moore_finder
Chris@16 30 : finder<BidiIter>
Chris@16 31 {
Chris@16 32 typedef typename iterator_value<BidiIter>::type char_type;
Chris@16 33
Chris@16 34 boyer_moore_finder(char_type const *begin, char_type const *end, Traits const &tr, bool icase)
Chris@16 35 : bm_(begin, end, tr, icase)
Chris@16 36 {
Chris@16 37 }
Chris@16 38
Chris@16 39 bool ok_for_partial_matches() const
Chris@16 40 {
Chris@16 41 return false;
Chris@16 42 }
Chris@16 43
Chris@16 44 bool operator ()(match_state<BidiIter> &state) const
Chris@16 45 {
Chris@16 46 Traits const &tr = traits_cast<Traits>(state);
Chris@16 47 state.cur_ = this->bm_.find(state.cur_, state.end_, tr);
Chris@16 48 return state.cur_ != state.end_;
Chris@16 49 }
Chris@16 50
Chris@16 51 private:
Chris@16 52 boyer_moore_finder(boyer_moore_finder const &);
Chris@16 53 boyer_moore_finder &operator =(boyer_moore_finder const &);
Chris@16 54
Chris@16 55 boyer_moore<BidiIter, Traits> bm_;
Chris@16 56 };
Chris@16 57
Chris@16 58 ///////////////////////////////////////////////////////////////////////////////
Chris@16 59 // hash_peek_finder
Chris@16 60 //
Chris@16 61 template<typename BidiIter, typename Traits>
Chris@16 62 struct hash_peek_finder
Chris@16 63 : finder<BidiIter>
Chris@16 64 {
Chris@16 65 typedef typename iterator_value<BidiIter>::type char_type;
Chris@16 66
Chris@16 67 hash_peek_finder(hash_peek_bitset<char_type> const &bset)
Chris@16 68 : bset_(bset)
Chris@16 69 {
Chris@16 70 }
Chris@16 71
Chris@16 72 bool operator ()(match_state<BidiIter> &state) const
Chris@16 73 {
Chris@16 74 Traits const &tr = traits_cast<Traits>(state);
Chris@16 75 state.cur_ = (this->bset_.icase()
Chris@16 76 ? this->find_(state.cur_, state.end_, tr, mpl::true_())
Chris@16 77 : this->find_(state.cur_, state.end_, tr, mpl::false_()));
Chris@16 78 return state.cur_ != state.end_;
Chris@16 79 }
Chris@16 80
Chris@16 81 private:
Chris@16 82 hash_peek_finder(hash_peek_finder const &);
Chris@16 83 hash_peek_finder &operator =(hash_peek_finder const &);
Chris@16 84
Chris@16 85 template<typename ICase>
Chris@16 86 BidiIter find_(BidiIter begin, BidiIter end, Traits const &tr, ICase) const
Chris@16 87 {
Chris@16 88 for(; begin != end && !this->bset_.test(*begin, tr, ICase()); ++begin)
Chris@16 89 ;
Chris@16 90 return begin;
Chris@16 91 }
Chris@16 92
Chris@16 93 hash_peek_bitset<char_type> bset_;
Chris@16 94 };
Chris@16 95
Chris@16 96 ///////////////////////////////////////////////////////////////////////////////
Chris@16 97 // line_start_finder
Chris@16 98 //
Chris@16 99 template<typename BidiIter, typename Traits, std::size_t Size = sizeof(typename iterator_value<BidiIter>::type)>
Chris@16 100 struct line_start_finder
Chris@16 101 : finder<BidiIter>
Chris@16 102 {
Chris@16 103 typedef typename iterator_value<BidiIter>::type char_type;
Chris@16 104 typedef typename iterator_difference<BidiIter>::type diff_type;
Chris@16 105 typedef typename Traits::char_class_type char_class_type;
Chris@16 106
Chris@16 107 line_start_finder(Traits const &tr)
Chris@16 108 : newline_(lookup_classname(tr, "newline"))
Chris@16 109 {
Chris@16 110 }
Chris@16 111
Chris@16 112 bool operator ()(match_state<BidiIter> &state) const
Chris@16 113 {
Chris@16 114 if(state.bos() && state.flags_.match_bol_)
Chris@16 115 {
Chris@16 116 return true;
Chris@16 117 }
Chris@16 118
Chris@16 119 Traits const &tr = traits_cast<Traits>(state);
Chris@16 120 BidiIter cur = state.cur_;
Chris@16 121 BidiIter const end = state.end_;
Chris@16 122 std::advance(cur, static_cast<diff_type>(-!state.bos()));
Chris@16 123
Chris@16 124 for(; cur != end; ++cur)
Chris@16 125 {
Chris@16 126 if(tr.isctype(*cur, this->newline_))
Chris@16 127 {
Chris@16 128 state.cur_ = ++cur;
Chris@16 129 return true;
Chris@16 130 }
Chris@16 131 }
Chris@16 132
Chris@16 133 return false;
Chris@16 134 }
Chris@16 135
Chris@16 136 private:
Chris@16 137 line_start_finder(line_start_finder const &);
Chris@16 138 line_start_finder &operator =(line_start_finder const &);
Chris@16 139
Chris@16 140 char_class_type newline_;
Chris@16 141 };
Chris@16 142
Chris@16 143 ///////////////////////////////////////////////////////////////////////////////
Chris@16 144 // line_start_finder
Chris@16 145 //
Chris@16 146 template<typename BidiIter, typename Traits>
Chris@16 147 struct line_start_finder<BidiIter, Traits, 1u>
Chris@16 148 : finder<BidiIter>
Chris@16 149 {
Chris@16 150 typedef typename iterator_value<BidiIter>::type char_type;
Chris@16 151 typedef typename iterator_difference<BidiIter>::type diff_type;
Chris@16 152 typedef typename Traits::char_class_type char_class_type;
Chris@16 153
Chris@16 154 line_start_finder(Traits const &tr)
Chris@16 155 {
Chris@16 156 char_class_type newline = lookup_classname(tr, "newline");
Chris@16 157 for(int j = 0; j < 256; ++j)
Chris@16 158 {
Chris@16 159 this->bits_[j] = tr.isctype(static_cast<char_type>(static_cast<unsigned char>(j)), newline);
Chris@16 160 }
Chris@16 161 }
Chris@16 162
Chris@16 163 bool operator ()(match_state<BidiIter> &state) const
Chris@16 164 {
Chris@16 165 if(state.bos() && state.flags_.match_bol_)
Chris@16 166 {
Chris@16 167 return true;
Chris@16 168 }
Chris@16 169
Chris@16 170 BidiIter cur = state.cur_;
Chris@16 171 BidiIter const end = state.end_;
Chris@16 172 std::advance(cur, static_cast<diff_type>(-!state.bos()));
Chris@16 173
Chris@16 174 for(; cur != end; ++cur)
Chris@16 175 {
Chris@16 176 if(this->bits_[static_cast<unsigned char>(*cur)])
Chris@16 177 {
Chris@16 178 state.cur_ = ++cur;
Chris@16 179 return true;
Chris@16 180 }
Chris@16 181 }
Chris@16 182
Chris@16 183 return false;
Chris@16 184 }
Chris@16 185
Chris@16 186 private:
Chris@16 187 line_start_finder(line_start_finder const &);
Chris@16 188 line_start_finder &operator =(line_start_finder const &);
Chris@16 189
Chris@16 190 bool bits_[256];
Chris@16 191 };
Chris@16 192
Chris@16 193 ///////////////////////////////////////////////////////////////////////////////
Chris@16 194 // leading_simple_repeat_finder
Chris@16 195 //
Chris@16 196 template<typename BidiIter>
Chris@16 197 struct leading_simple_repeat_finder
Chris@16 198 : finder<BidiIter>
Chris@16 199 {
Chris@16 200 leading_simple_repeat_finder()
Chris@16 201 : finder<BidiIter>()
Chris@16 202 {}
Chris@16 203
Chris@16 204 bool operator ()(match_state<BidiIter> &state) const
Chris@16 205 {
Chris@16 206 state.cur_ = state.next_search_;
Chris@16 207 return true;
Chris@16 208 }
Chris@16 209
Chris@16 210 private:
Chris@16 211 leading_simple_repeat_finder(leading_simple_repeat_finder const &);
Chris@16 212 leading_simple_repeat_finder &operator =(leading_simple_repeat_finder const &);
Chris@16 213 };
Chris@16 214
Chris@16 215 }}}
Chris@16 216
Chris@101 217 #if defined(_MSC_VER)
Chris@16 218 # pragma warning(pop)
Chris@16 219 #endif
Chris@16 220
Chris@16 221 #endif