1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*- 2*58b9f456SAndroid Build Coastguard Worker//===--------------------------- regex ------------------------------------===// 3*58b9f456SAndroid Build Coastguard Worker// 4*58b9f456SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker// 6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open 7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker// 9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Worker 11*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_REGEX 12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_REGEX 13*58b9f456SAndroid Build Coastguard Worker 14*58b9f456SAndroid Build Coastguard Worker/* 15*58b9f456SAndroid Build Coastguard Worker regex synopsis 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard Worker#include <initializer_list> 18*58b9f456SAndroid Build Coastguard Worker 19*58b9f456SAndroid Build Coastguard Workernamespace std 20*58b9f456SAndroid Build Coastguard Worker{ 21*58b9f456SAndroid Build Coastguard Worker 22*58b9f456SAndroid Build Coastguard Workernamespace regex_constants 23*58b9f456SAndroid Build Coastguard Worker{ 24*58b9f456SAndroid Build Coastguard Worker 25*58b9f456SAndroid Build Coastguard Workeremum syntax_option_type 26*58b9f456SAndroid Build Coastguard Worker{ 27*58b9f456SAndroid Build Coastguard Worker icase = unspecified, 28*58b9f456SAndroid Build Coastguard Worker nosubs = unspecified, 29*58b9f456SAndroid Build Coastguard Worker optimize = unspecified, 30*58b9f456SAndroid Build Coastguard Worker collate = unspecified, 31*58b9f456SAndroid Build Coastguard Worker ECMAScript = unspecified, 32*58b9f456SAndroid Build Coastguard Worker basic = unspecified, 33*58b9f456SAndroid Build Coastguard Worker extended = unspecified, 34*58b9f456SAndroid Build Coastguard Worker awk = unspecified, 35*58b9f456SAndroid Build Coastguard Worker grep = unspecified, 36*58b9f456SAndroid Build Coastguard Worker egrep = unspecified 37*58b9f456SAndroid Build Coastguard Worker}; 38*58b9f456SAndroid Build Coastguard Worker 39*58b9f456SAndroid Build Coastguard Workerconstexpr syntax_option_type operator~(syntax_option_type f); 40*58b9f456SAndroid Build Coastguard Workerconstexpr syntax_option_type operator&(syntax_option_type lhs, syntax_option_type rhs); 41*58b9f456SAndroid Build Coastguard Workerconstexpr syntax_option_type operator|(syntax_option_type lhs, syntax_option_type rhs); 42*58b9f456SAndroid Build Coastguard Worker 43*58b9f456SAndroid Build Coastguard Workerenum match_flag_type 44*58b9f456SAndroid Build Coastguard Worker{ 45*58b9f456SAndroid Build Coastguard Worker match_default = 0, 46*58b9f456SAndroid Build Coastguard Worker match_not_bol = unspecified, 47*58b9f456SAndroid Build Coastguard Worker match_not_eol = unspecified, 48*58b9f456SAndroid Build Coastguard Worker match_not_bow = unspecified, 49*58b9f456SAndroid Build Coastguard Worker match_not_eow = unspecified, 50*58b9f456SAndroid Build Coastguard Worker match_any = unspecified, 51*58b9f456SAndroid Build Coastguard Worker match_not_null = unspecified, 52*58b9f456SAndroid Build Coastguard Worker match_continuous = unspecified, 53*58b9f456SAndroid Build Coastguard Worker match_prev_avail = unspecified, 54*58b9f456SAndroid Build Coastguard Worker format_default = 0, 55*58b9f456SAndroid Build Coastguard Worker format_sed = unspecified, 56*58b9f456SAndroid Build Coastguard Worker format_no_copy = unspecified, 57*58b9f456SAndroid Build Coastguard Worker format_first_only = unspecified 58*58b9f456SAndroid Build Coastguard Worker}; 59*58b9f456SAndroid Build Coastguard Worker 60*58b9f456SAndroid Build Coastguard Workerconstexpr match_flag_type operator~(match_flag_type f); 61*58b9f456SAndroid Build Coastguard Workerconstexpr match_flag_type operator&(match_flag_type lhs, match_flag_type rhs); 62*58b9f456SAndroid Build Coastguard Workerconstexpr match_flag_type operator|(match_flag_type lhs, match_flag_type rhs); 63*58b9f456SAndroid Build Coastguard Worker 64*58b9f456SAndroid Build Coastguard Workerenum error_type 65*58b9f456SAndroid Build Coastguard Worker{ 66*58b9f456SAndroid Build Coastguard Worker error_collate = unspecified, 67*58b9f456SAndroid Build Coastguard Worker error_ctype = unspecified, 68*58b9f456SAndroid Build Coastguard Worker error_escape = unspecified, 69*58b9f456SAndroid Build Coastguard Worker error_backref = unspecified, 70*58b9f456SAndroid Build Coastguard Worker error_brack = unspecified, 71*58b9f456SAndroid Build Coastguard Worker error_paren = unspecified, 72*58b9f456SAndroid Build Coastguard Worker error_brace = unspecified, 73*58b9f456SAndroid Build Coastguard Worker error_badbrace = unspecified, 74*58b9f456SAndroid Build Coastguard Worker error_range = unspecified, 75*58b9f456SAndroid Build Coastguard Worker error_space = unspecified, 76*58b9f456SAndroid Build Coastguard Worker error_badrepeat = unspecified, 77*58b9f456SAndroid Build Coastguard Worker error_complexity = unspecified, 78*58b9f456SAndroid Build Coastguard Worker error_stack = unspecified 79*58b9f456SAndroid Build Coastguard Worker}; 80*58b9f456SAndroid Build Coastguard Worker 81*58b9f456SAndroid Build Coastguard Worker} // regex_constants 82*58b9f456SAndroid Build Coastguard Worker 83*58b9f456SAndroid Build Coastguard Workerclass regex_error 84*58b9f456SAndroid Build Coastguard Worker : public runtime_error 85*58b9f456SAndroid Build Coastguard Worker{ 86*58b9f456SAndroid Build Coastguard Workerpublic: 87*58b9f456SAndroid Build Coastguard Worker explicit regex_error(regex_constants::error_type ecode); 88*58b9f456SAndroid Build Coastguard Worker regex_constants::error_type code() const; 89*58b9f456SAndroid Build Coastguard Worker}; 90*58b9f456SAndroid Build Coastguard Worker 91*58b9f456SAndroid Build Coastguard Workertemplate <class charT> 92*58b9f456SAndroid Build Coastguard Workerstruct regex_traits 93*58b9f456SAndroid Build Coastguard Worker{ 94*58b9f456SAndroid Build Coastguard Workerpublic: 95*58b9f456SAndroid Build Coastguard Worker typedef charT char_type; 96*58b9f456SAndroid Build Coastguard Worker typedef basic_string<char_type> string_type; 97*58b9f456SAndroid Build Coastguard Worker typedef locale locale_type; 98*58b9f456SAndroid Build Coastguard Worker typedef /bitmask_type/ char_class_type; 99*58b9f456SAndroid Build Coastguard Worker 100*58b9f456SAndroid Build Coastguard Worker regex_traits(); 101*58b9f456SAndroid Build Coastguard Worker 102*58b9f456SAndroid Build Coastguard Worker static size_t length(const char_type* p); 103*58b9f456SAndroid Build Coastguard Worker charT translate(charT c) const; 104*58b9f456SAndroid Build Coastguard Worker charT translate_nocase(charT c) const; 105*58b9f456SAndroid Build Coastguard Worker template <class ForwardIterator> 106*58b9f456SAndroid Build Coastguard Worker string_type 107*58b9f456SAndroid Build Coastguard Worker transform(ForwardIterator first, ForwardIterator last) const; 108*58b9f456SAndroid Build Coastguard Worker template <class ForwardIterator> 109*58b9f456SAndroid Build Coastguard Worker string_type 110*58b9f456SAndroid Build Coastguard Worker transform_primary( ForwardIterator first, ForwardIterator last) const; 111*58b9f456SAndroid Build Coastguard Worker template <class ForwardIterator> 112*58b9f456SAndroid Build Coastguard Worker string_type 113*58b9f456SAndroid Build Coastguard Worker lookup_collatename(ForwardIterator first, ForwardIterator last) const; 114*58b9f456SAndroid Build Coastguard Worker template <class ForwardIterator> 115*58b9f456SAndroid Build Coastguard Worker char_class_type 116*58b9f456SAndroid Build Coastguard Worker lookup_classname(ForwardIterator first, ForwardIterator last, 117*58b9f456SAndroid Build Coastguard Worker bool icase = false) const; 118*58b9f456SAndroid Build Coastguard Worker bool isctype(charT c, char_class_type f) const; 119*58b9f456SAndroid Build Coastguard Worker int value(charT ch, int radix) const; 120*58b9f456SAndroid Build Coastguard Worker locale_type imbue(locale_type l); 121*58b9f456SAndroid Build Coastguard Worker locale_type getloc()const; 122*58b9f456SAndroid Build Coastguard Worker}; 123*58b9f456SAndroid Build Coastguard Worker 124*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class traits = regex_traits<charT>> 125*58b9f456SAndroid Build Coastguard Workerclass basic_regex 126*58b9f456SAndroid Build Coastguard Worker{ 127*58b9f456SAndroid Build Coastguard Workerpublic: 128*58b9f456SAndroid Build Coastguard Worker // types: 129*58b9f456SAndroid Build Coastguard Worker typedef charT value_type; 130*58b9f456SAndroid Build Coastguard Worker typedef traits traits_type; 131*58b9f456SAndroid Build Coastguard Worker typedef typename traits::string_type string_type; 132*58b9f456SAndroid Build Coastguard Worker typedef regex_constants::syntax_option_type flag_type; 133*58b9f456SAndroid Build Coastguard Worker typedef typename traits::locale_type locale_type; 134*58b9f456SAndroid Build Coastguard Worker 135*58b9f456SAndroid Build Coastguard Worker // constants: 136*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type icase = regex_constants::icase; 137*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type nosubs = regex_constants::nosubs; 138*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type optimize = regex_constants::optimize; 139*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type collate = regex_constants::collate; 140*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript; 141*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type basic = regex_constants::basic; 142*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type extended = regex_constants::extended; 143*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type awk = regex_constants::awk; 144*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type grep = regex_constants::grep; 145*58b9f456SAndroid Build Coastguard Worker static constexpr regex_constants::syntax_option_type egrep = regex_constants::egrep; 146*58b9f456SAndroid Build Coastguard Worker 147*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 148*58b9f456SAndroid Build Coastguard Worker basic_regex(); 149*58b9f456SAndroid Build Coastguard Worker explicit basic_regex(const charT* p, flag_type f = regex_constants::ECMAScript); 150*58b9f456SAndroid Build Coastguard Worker basic_regex(const charT* p, size_t len, flag_type f = regex_constants::ECMAScript); 151*58b9f456SAndroid Build Coastguard Worker basic_regex(const basic_regex&); 152*58b9f456SAndroid Build Coastguard Worker basic_regex(basic_regex&&) noexcept; 153*58b9f456SAndroid Build Coastguard Worker template <class ST, class SA> 154*58b9f456SAndroid Build Coastguard Worker explicit basic_regex(const basic_string<charT, ST, SA>& p, 155*58b9f456SAndroid Build Coastguard Worker flag_type f = regex_constants::ECMAScript); 156*58b9f456SAndroid Build Coastguard Worker template <class ForwardIterator> 157*58b9f456SAndroid Build Coastguard Worker basic_regex(ForwardIterator first, ForwardIterator last, 158*58b9f456SAndroid Build Coastguard Worker flag_type f = regex_constants::ECMAScript); 159*58b9f456SAndroid Build Coastguard Worker basic_regex(initializer_list<charT>, flag_type = regex_constants::ECMAScript); 160*58b9f456SAndroid Build Coastguard Worker 161*58b9f456SAndroid Build Coastguard Worker ~basic_regex(); 162*58b9f456SAndroid Build Coastguard Worker 163*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(const basic_regex&); 164*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(basic_regex&&) noexcept; 165*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(const charT* ptr); 166*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(initializer_list<charT> il); 167*58b9f456SAndroid Build Coastguard Worker template <class ST, class SA> 168*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(const basic_string<charT, ST, SA>& p); 169*58b9f456SAndroid Build Coastguard Worker 170*58b9f456SAndroid Build Coastguard Worker // assign: 171*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const basic_regex& that); 172*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(basic_regex&& that) noexcept; 173*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const charT* ptr, flag_type f = regex_constants::ECMAScript); 174*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const charT* p, size_t len, flag_type f); 175*58b9f456SAndroid Build Coastguard Worker template <class string_traits, class A> 176*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const basic_string<charT, string_traits, A>& s, 177*58b9f456SAndroid Build Coastguard Worker flag_type f = regex_constants::ECMAScript); 178*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 179*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(InputIterator first, InputIterator last, 180*58b9f456SAndroid Build Coastguard Worker flag_type f = regex_constants::ECMAScript); 181*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(initializer_list<charT>, flag_type = regex_constants::ECMAScript); 182*58b9f456SAndroid Build Coastguard Worker 183*58b9f456SAndroid Build Coastguard Worker // const operations: 184*58b9f456SAndroid Build Coastguard Worker unsigned mark_count() const; 185*58b9f456SAndroid Build Coastguard Worker flag_type flags() const; 186*58b9f456SAndroid Build Coastguard Worker 187*58b9f456SAndroid Build Coastguard Worker // locale: 188*58b9f456SAndroid Build Coastguard Worker locale_type imbue(locale_type loc); 189*58b9f456SAndroid Build Coastguard Worker locale_type getloc() const; 190*58b9f456SAndroid Build Coastguard Worker 191*58b9f456SAndroid Build Coastguard Worker // swap: 192*58b9f456SAndroid Build Coastguard Worker void swap(basic_regex&); 193*58b9f456SAndroid Build Coastguard Worker}; 194*58b9f456SAndroid Build Coastguard Worker 195*58b9f456SAndroid Build Coastguard Workertemplate<class ForwardIterator> 196*58b9f456SAndroid Build Coastguard Workerbasic_regex(ForwardIterator, ForwardIterator, 197*58b9f456SAndroid Build Coastguard Worker regex_constants::syntax_option_type = regex_constants::ECMAScript) 198*58b9f456SAndroid Build Coastguard Worker -> basic_regex<typename iterator_traits<ForwardIterator>::value_type>; // C++17 199*58b9f456SAndroid Build Coastguard Worker 200*58b9f456SAndroid Build Coastguard Workertypedef basic_regex<char> regex; 201*58b9f456SAndroid Build Coastguard Workertypedef basic_regex<wchar_t> wregex; 202*58b9f456SAndroid Build Coastguard Worker 203*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class traits> 204*58b9f456SAndroid Build Coastguard Worker void swap(basic_regex<charT, traits>& e1, basic_regex<charT, traits>& e2); 205*58b9f456SAndroid Build Coastguard Worker 206*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator> 207*58b9f456SAndroid Build Coastguard Workerclass sub_match 208*58b9f456SAndroid Build Coastguard Worker : public pair<BidirectionalIterator, BidirectionalIterator> 209*58b9f456SAndroid Build Coastguard Worker{ 210*58b9f456SAndroid Build Coastguard Workerpublic: 211*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<BidirectionalIterator>::value_type value_type; 212*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type; 213*58b9f456SAndroid Build Coastguard Worker typedef BidirectionalIterator iterator; 214*58b9f456SAndroid Build Coastguard Worker typedef basic_string<value_type> string_type; 215*58b9f456SAndroid Build Coastguard Worker 216*58b9f456SAndroid Build Coastguard Worker bool matched; 217*58b9f456SAndroid Build Coastguard Worker 218*58b9f456SAndroid Build Coastguard Worker constexpr sub_match(); 219*58b9f456SAndroid Build Coastguard Worker 220*58b9f456SAndroid Build Coastguard Worker difference_type length() const; 221*58b9f456SAndroid Build Coastguard Worker operator string_type() const; 222*58b9f456SAndroid Build Coastguard Worker string_type str() const; 223*58b9f456SAndroid Build Coastguard Worker 224*58b9f456SAndroid Build Coastguard Worker int compare(const sub_match& s) const; 225*58b9f456SAndroid Build Coastguard Worker int compare(const string_type& s) const; 226*58b9f456SAndroid Build Coastguard Worker int compare(const value_type* s) const; 227*58b9f456SAndroid Build Coastguard Worker}; 228*58b9f456SAndroid Build Coastguard Worker 229*58b9f456SAndroid Build Coastguard Workertypedef sub_match<const char*> csub_match; 230*58b9f456SAndroid Build Coastguard Workertypedef sub_match<const wchar_t*> wcsub_match; 231*58b9f456SAndroid Build Coastguard Workertypedef sub_match<string::const_iterator> ssub_match; 232*58b9f456SAndroid Build Coastguard Workertypedef sub_match<wstring::const_iterator> wssub_match; 233*58b9f456SAndroid Build Coastguard Worker 234*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 235*58b9f456SAndroid Build Coastguard Worker bool 236*58b9f456SAndroid Build Coastguard Worker operator==(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 237*58b9f456SAndroid Build Coastguard Worker 238*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 239*58b9f456SAndroid Build Coastguard Worker bool 240*58b9f456SAndroid Build Coastguard Worker operator!=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 241*58b9f456SAndroid Build Coastguard Worker 242*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 243*58b9f456SAndroid Build Coastguard Worker bool 244*58b9f456SAndroid Build Coastguard Worker operator<(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 245*58b9f456SAndroid Build Coastguard Worker 246*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 247*58b9f456SAndroid Build Coastguard Worker bool 248*58b9f456SAndroid Build Coastguard Worker operator<=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 249*58b9f456SAndroid Build Coastguard Worker 250*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 251*58b9f456SAndroid Build Coastguard Worker bool 252*58b9f456SAndroid Build Coastguard Worker operator>=(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 253*58b9f456SAndroid Build Coastguard Worker 254*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 255*58b9f456SAndroid Build Coastguard Worker bool 256*58b9f456SAndroid Build Coastguard Worker operator>(const sub_match<BiIter>& lhs, const sub_match<BiIter>& rhs); 257*58b9f456SAndroid Build Coastguard Worker 258*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 259*58b9f456SAndroid Build Coastguard Worker bool 260*58b9f456SAndroid Build Coastguard Worker operator==(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 261*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 262*58b9f456SAndroid Build Coastguard Worker 263*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 264*58b9f456SAndroid Build Coastguard Worker bool 265*58b9f456SAndroid Build Coastguard Worker operator!=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 266*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 267*58b9f456SAndroid Build Coastguard Worker 268*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 269*58b9f456SAndroid Build Coastguard Worker bool 270*58b9f456SAndroid Build Coastguard Worker operator<(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 271*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 272*58b9f456SAndroid Build Coastguard Worker 273*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 274*58b9f456SAndroid Build Coastguard Worker bool 275*58b9f456SAndroid Build Coastguard Worker operator>(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 276*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 277*58b9f456SAndroid Build Coastguard Worker 278*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 279*58b9f456SAndroid Build Coastguard Worker bool operator>=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 280*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 281*58b9f456SAndroid Build Coastguard Worker 282*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 283*58b9f456SAndroid Build Coastguard Worker bool 284*58b9f456SAndroid Build Coastguard Worker operator<=(const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, 285*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 286*58b9f456SAndroid Build Coastguard Worker 287*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 288*58b9f456SAndroid Build Coastguard Worker bool 289*58b9f456SAndroid Build Coastguard Worker operator==(const sub_match<BiIter>& lhs, 290*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 291*58b9f456SAndroid Build Coastguard Worker 292*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 293*58b9f456SAndroid Build Coastguard Worker bool 294*58b9f456SAndroid Build Coastguard Worker operator!=(const sub_match<BiIter>& lhs, 295*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 296*58b9f456SAndroid Build Coastguard Worker 297*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 298*58b9f456SAndroid Build Coastguard Worker bool 299*58b9f456SAndroid Build Coastguard Worker operator<(const sub_match<BiIter>& lhs, 300*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 301*58b9f456SAndroid Build Coastguard Worker 302*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 303*58b9f456SAndroid Build Coastguard Worker bool operator>(const sub_match<BiIter>& lhs, 304*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 305*58b9f456SAndroid Build Coastguard Worker 306*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 307*58b9f456SAndroid Build Coastguard Worker bool 308*58b9f456SAndroid Build Coastguard Worker operator>=(const sub_match<BiIter>& lhs, 309*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 310*58b9f456SAndroid Build Coastguard Worker 311*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter, class ST, class SA> 312*58b9f456SAndroid Build Coastguard Worker bool 313*58b9f456SAndroid Build Coastguard Worker operator<=(const sub_match<BiIter>& lhs, 314*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<BiIter>::value_type, ST, SA>& rhs); 315*58b9f456SAndroid Build Coastguard Worker 316*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 317*58b9f456SAndroid Build Coastguard Worker bool 318*58b9f456SAndroid Build Coastguard Worker operator==(typename iterator_traits<BiIter>::value_type const* lhs, 319*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 320*58b9f456SAndroid Build Coastguard Worker 321*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 322*58b9f456SAndroid Build Coastguard Worker bool 323*58b9f456SAndroid Build Coastguard Worker operator!=(typename iterator_traits<BiIter>::value_type const* lhs, 324*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 325*58b9f456SAndroid Build Coastguard Worker 326*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 327*58b9f456SAndroid Build Coastguard Worker bool 328*58b9f456SAndroid Build Coastguard Worker operator<(typename iterator_traits<BiIter>::value_type const* lhs, 329*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 330*58b9f456SAndroid Build Coastguard Worker 331*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 332*58b9f456SAndroid Build Coastguard Worker bool 333*58b9f456SAndroid Build Coastguard Worker operator>(typename iterator_traits<BiIter>::value_type const* lhs, 334*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 335*58b9f456SAndroid Build Coastguard Worker 336*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 337*58b9f456SAndroid Build Coastguard Worker bool 338*58b9f456SAndroid Build Coastguard Worker operator>=(typename iterator_traits<BiIter>::value_type const* lhs, 339*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 340*58b9f456SAndroid Build Coastguard Worker 341*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 342*58b9f456SAndroid Build Coastguard Worker bool 343*58b9f456SAndroid Build Coastguard Worker operator<=(typename iterator_traits<BiIter>::value_type const* lhs, 344*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 345*58b9f456SAndroid Build Coastguard Worker 346*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 347*58b9f456SAndroid Build Coastguard Worker bool 348*58b9f456SAndroid Build Coastguard Worker operator==(const sub_match<BiIter>& lhs, 349*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 350*58b9f456SAndroid Build Coastguard Worker 351*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 352*58b9f456SAndroid Build Coastguard Worker bool 353*58b9f456SAndroid Build Coastguard Worker operator!=(const sub_match<BiIter>& lhs, 354*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 355*58b9f456SAndroid Build Coastguard Worker 356*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 357*58b9f456SAndroid Build Coastguard Worker bool 358*58b9f456SAndroid Build Coastguard Worker operator<(const sub_match<BiIter>& lhs, 359*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 360*58b9f456SAndroid Build Coastguard Worker 361*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 362*58b9f456SAndroid Build Coastguard Worker bool 363*58b9f456SAndroid Build Coastguard Worker operator>(const sub_match<BiIter>& lhs, 364*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 365*58b9f456SAndroid Build Coastguard Worker 366*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 367*58b9f456SAndroid Build Coastguard Worker bool 368*58b9f456SAndroid Build Coastguard Worker operator>=(const sub_match<BiIter>& lhs, 369*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 370*58b9f456SAndroid Build Coastguard Worker 371*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 372*58b9f456SAndroid Build Coastguard Worker bool 373*58b9f456SAndroid Build Coastguard Worker operator<=(const sub_match<BiIter>& lhs, 374*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const* rhs); 375*58b9f456SAndroid Build Coastguard Worker 376*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 377*58b9f456SAndroid Build Coastguard Worker bool 378*58b9f456SAndroid Build Coastguard Worker operator==(typename iterator_traits<BiIter>::value_type const& lhs, 379*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 380*58b9f456SAndroid Build Coastguard Worker 381*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 382*58b9f456SAndroid Build Coastguard Worker bool 383*58b9f456SAndroid Build Coastguard Worker operator!=(typename iterator_traits<BiIter>::value_type const& lhs, 384*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 385*58b9f456SAndroid Build Coastguard Worker 386*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 387*58b9f456SAndroid Build Coastguard Worker bool 388*58b9f456SAndroid Build Coastguard Worker operator<(typename iterator_traits<BiIter>::value_type const& lhs, 389*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 390*58b9f456SAndroid Build Coastguard Worker 391*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 392*58b9f456SAndroid Build Coastguard Worker bool 393*58b9f456SAndroid Build Coastguard Worker operator>(typename iterator_traits<BiIter>::value_type const& lhs, 394*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 395*58b9f456SAndroid Build Coastguard Worker 396*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 397*58b9f456SAndroid Build Coastguard Worker bool 398*58b9f456SAndroid Build Coastguard Worker operator>=(typename iterator_traits<BiIter>::value_type const& lhs, 399*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 400*58b9f456SAndroid Build Coastguard Worker 401*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 402*58b9f456SAndroid Build Coastguard Worker bool 403*58b9f456SAndroid Build Coastguard Worker operator<=(typename iterator_traits<BiIter>::value_type const& lhs, 404*58b9f456SAndroid Build Coastguard Worker const sub_match<BiIter>& rhs); 405*58b9f456SAndroid Build Coastguard Worker 406*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 407*58b9f456SAndroid Build Coastguard Worker bool 408*58b9f456SAndroid Build Coastguard Worker operator==(const sub_match<BiIter>& lhs, 409*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 410*58b9f456SAndroid Build Coastguard Worker 411*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 412*58b9f456SAndroid Build Coastguard Worker bool 413*58b9f456SAndroid Build Coastguard Worker operator!=(const sub_match<BiIter>& lhs, 414*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 415*58b9f456SAndroid Build Coastguard Worker 416*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 417*58b9f456SAndroid Build Coastguard Worker bool 418*58b9f456SAndroid Build Coastguard Worker operator<(const sub_match<BiIter>& lhs, 419*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 420*58b9f456SAndroid Build Coastguard Worker 421*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 422*58b9f456SAndroid Build Coastguard Worker bool 423*58b9f456SAndroid Build Coastguard Worker operator>(const sub_match<BiIter>& lhs, 424*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 425*58b9f456SAndroid Build Coastguard Worker 426*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 427*58b9f456SAndroid Build Coastguard Worker bool 428*58b9f456SAndroid Build Coastguard Worker operator>=(const sub_match<BiIter>& lhs, 429*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 430*58b9f456SAndroid Build Coastguard Worker 431*58b9f456SAndroid Build Coastguard Workertemplate <class BiIter> 432*58b9f456SAndroid Build Coastguard Worker bool 433*58b9f456SAndroid Build Coastguard Worker operator<=(const sub_match<BiIter>& lhs, 434*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<BiIter>::value_type const& rhs); 435*58b9f456SAndroid Build Coastguard Worker 436*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class ST, class BiIter> 437*58b9f456SAndroid Build Coastguard Worker basic_ostream<charT, ST>& 438*58b9f456SAndroid Build Coastguard Worker operator<<(basic_ostream<charT, ST>& os, const sub_match<BiIter>& m); 439*58b9f456SAndroid Build Coastguard Worker 440*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, 441*58b9f456SAndroid Build Coastguard Worker class Allocator = allocator<sub_match<BidirectionalIterator>>> 442*58b9f456SAndroid Build Coastguard Workerclass match_results 443*58b9f456SAndroid Build Coastguard Worker{ 444*58b9f456SAndroid Build Coastguard Workerpublic: 445*58b9f456SAndroid Build Coastguard Worker typedef sub_match<BidirectionalIterator> value_type; 446*58b9f456SAndroid Build Coastguard Worker typedef const value_type& const_reference; 447*58b9f456SAndroid Build Coastguard Worker typedef value_type& reference; 448*58b9f456SAndroid Build Coastguard Worker typedef /implementation-defined/ const_iterator; 449*58b9f456SAndroid Build Coastguard Worker typedef const_iterator iterator; 450*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<BidirectionalIterator>::difference_type difference_type; 451*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_traits<Allocator>::size_type size_type; 452*58b9f456SAndroid Build Coastguard Worker typedef Allocator allocator_type; 453*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<BidirectionalIterator>::value_type char_type; 454*58b9f456SAndroid Build Coastguard Worker typedef basic_string<char_type> string_type; 455*58b9f456SAndroid Build Coastguard Worker 456*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 457*58b9f456SAndroid Build Coastguard Worker explicit match_results(const Allocator& a = Allocator()); 458*58b9f456SAndroid Build Coastguard Worker match_results(const match_results& m); 459*58b9f456SAndroid Build Coastguard Worker match_results(match_results&& m) noexcept; 460*58b9f456SAndroid Build Coastguard Worker match_results& operator=(const match_results& m); 461*58b9f456SAndroid Build Coastguard Worker match_results& operator=(match_results&& m); 462*58b9f456SAndroid Build Coastguard Worker ~match_results(); 463*58b9f456SAndroid Build Coastguard Worker 464*58b9f456SAndroid Build Coastguard Worker bool ready() const; 465*58b9f456SAndroid Build Coastguard Worker 466*58b9f456SAndroid Build Coastguard Worker // size: 467*58b9f456SAndroid Build Coastguard Worker size_type size() const; 468*58b9f456SAndroid Build Coastguard Worker size_type max_size() const; 469*58b9f456SAndroid Build Coastguard Worker bool empty() const; 470*58b9f456SAndroid Build Coastguard Worker 471*58b9f456SAndroid Build Coastguard Worker // element access: 472*58b9f456SAndroid Build Coastguard Worker difference_type length(size_type sub = 0) const; 473*58b9f456SAndroid Build Coastguard Worker difference_type position(size_type sub = 0) const; 474*58b9f456SAndroid Build Coastguard Worker string_type str(size_type sub = 0) const; 475*58b9f456SAndroid Build Coastguard Worker const_reference operator[](size_type n) const; 476*58b9f456SAndroid Build Coastguard Worker 477*58b9f456SAndroid Build Coastguard Worker const_reference prefix() const; 478*58b9f456SAndroid Build Coastguard Worker const_reference suffix() const; 479*58b9f456SAndroid Build Coastguard Worker 480*58b9f456SAndroid Build Coastguard Worker const_iterator begin() const; 481*58b9f456SAndroid Build Coastguard Worker const_iterator end() const; 482*58b9f456SAndroid Build Coastguard Worker const_iterator cbegin() const; 483*58b9f456SAndroid Build Coastguard Worker const_iterator cend() const; 484*58b9f456SAndroid Build Coastguard Worker 485*58b9f456SAndroid Build Coastguard Worker // format: 486*58b9f456SAndroid Build Coastguard Worker template <class OutputIter> 487*58b9f456SAndroid Build Coastguard Worker OutputIter 488*58b9f456SAndroid Build Coastguard Worker format(OutputIter out, const char_type* fmt_first, 489*58b9f456SAndroid Build Coastguard Worker const char_type* fmt_last, 490*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::format_default) const; 491*58b9f456SAndroid Build Coastguard Worker template <class OutputIter, class ST, class SA> 492*58b9f456SAndroid Build Coastguard Worker OutputIter 493*58b9f456SAndroid Build Coastguard Worker format(OutputIter out, const basic_string<char_type, ST, SA>& fmt, 494*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::format_default) const; 495*58b9f456SAndroid Build Coastguard Worker template <class ST, class SA> 496*58b9f456SAndroid Build Coastguard Worker basic_string<char_type, ST, SA> 497*58b9f456SAndroid Build Coastguard Worker format(const basic_string<char_type, ST, SA>& fmt, 498*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::format_default) const; 499*58b9f456SAndroid Build Coastguard Worker string_type 500*58b9f456SAndroid Build Coastguard Worker format(const char_type* fmt, 501*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::format_default) const; 502*58b9f456SAndroid Build Coastguard Worker 503*58b9f456SAndroid Build Coastguard Worker // allocator: 504*58b9f456SAndroid Build Coastguard Worker allocator_type get_allocator() const; 505*58b9f456SAndroid Build Coastguard Worker 506*58b9f456SAndroid Build Coastguard Worker // swap: 507*58b9f456SAndroid Build Coastguard Worker void swap(match_results& that); 508*58b9f456SAndroid Build Coastguard Worker}; 509*58b9f456SAndroid Build Coastguard Worker 510*58b9f456SAndroid Build Coastguard Workertypedef match_results<const char*> cmatch; 511*58b9f456SAndroid Build Coastguard Workertypedef match_results<const wchar_t*> wcmatch; 512*58b9f456SAndroid Build Coastguard Workertypedef match_results<string::const_iterator> smatch; 513*58b9f456SAndroid Build Coastguard Workertypedef match_results<wstring::const_iterator> wsmatch; 514*58b9f456SAndroid Build Coastguard Worker 515*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class Allocator> 516*58b9f456SAndroid Build Coastguard Worker bool 517*58b9f456SAndroid Build Coastguard Worker operator==(const match_results<BidirectionalIterator, Allocator>& m1, 518*58b9f456SAndroid Build Coastguard Worker const match_results<BidirectionalIterator, Allocator>& m2); 519*58b9f456SAndroid Build Coastguard Worker 520*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class Allocator> 521*58b9f456SAndroid Build Coastguard Worker bool 522*58b9f456SAndroid Build Coastguard Worker operator!=(const match_results<BidirectionalIterator, Allocator>& m1, 523*58b9f456SAndroid Build Coastguard Worker const match_results<BidirectionalIterator, Allocator>& m2); 524*58b9f456SAndroid Build Coastguard Worker 525*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class Allocator> 526*58b9f456SAndroid Build Coastguard Worker void 527*58b9f456SAndroid Build Coastguard Worker swap(match_results<BidirectionalIterator, Allocator>& m1, 528*58b9f456SAndroid Build Coastguard Worker match_results<BidirectionalIterator, Allocator>& m2); 529*58b9f456SAndroid Build Coastguard Worker 530*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class Allocator, class charT, class traits> 531*58b9f456SAndroid Build Coastguard Worker bool 532*58b9f456SAndroid Build Coastguard Worker regex_match(BidirectionalIterator first, BidirectionalIterator last, 533*58b9f456SAndroid Build Coastguard Worker match_results<BidirectionalIterator, Allocator>& m, 534*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 535*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 536*58b9f456SAndroid Build Coastguard Worker 537*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class charT, class traits> 538*58b9f456SAndroid Build Coastguard Worker bool 539*58b9f456SAndroid Build Coastguard Worker regex_match(BidirectionalIterator first, BidirectionalIterator last, 540*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 541*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 542*58b9f456SAndroid Build Coastguard Worker 543*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class Allocator, class traits> 544*58b9f456SAndroid Build Coastguard Worker bool 545*58b9f456SAndroid Build Coastguard Worker regex_match(const charT* str, match_results<const charT*, Allocator>& m, 546*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 547*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 548*58b9f456SAndroid Build Coastguard Worker 549*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class Allocator, class charT, class traits> 550*58b9f456SAndroid Build Coastguard Worker bool 551*58b9f456SAndroid Build Coastguard Worker regex_match(const basic_string<charT, ST, SA>& s, 552*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, 553*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 554*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 555*58b9f456SAndroid Build Coastguard Worker 556*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class Allocator, class charT, class traits> 557*58b9f456SAndroid Build Coastguard Worker bool 558*58b9f456SAndroid Build Coastguard Worker regex_match(const basic_string<charT, ST, SA>&& s, 559*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, 560*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 561*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default) = delete; // C++14 562*58b9f456SAndroid Build Coastguard Worker 563*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class traits> 564*58b9f456SAndroid Build Coastguard Worker bool 565*58b9f456SAndroid Build Coastguard Worker regex_match(const charT* str, const basic_regex<charT, traits>& e, 566*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 567*58b9f456SAndroid Build Coastguard Worker 568*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class charT, class traits> 569*58b9f456SAndroid Build Coastguard Worker bool 570*58b9f456SAndroid Build Coastguard Worker regex_match(const basic_string<charT, ST, SA>& s, 571*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 572*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 573*58b9f456SAndroid Build Coastguard Worker 574*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class Allocator, class charT, class traits> 575*58b9f456SAndroid Build Coastguard Worker bool 576*58b9f456SAndroid Build Coastguard Worker regex_search(BidirectionalIterator first, BidirectionalIterator last, 577*58b9f456SAndroid Build Coastguard Worker match_results<BidirectionalIterator, Allocator>& m, 578*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 579*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 580*58b9f456SAndroid Build Coastguard Worker 581*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, class charT, class traits> 582*58b9f456SAndroid Build Coastguard Worker bool 583*58b9f456SAndroid Build Coastguard Worker regex_search(BidirectionalIterator first, BidirectionalIterator last, 584*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 585*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 586*58b9f456SAndroid Build Coastguard Worker 587*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class Allocator, class traits> 588*58b9f456SAndroid Build Coastguard Worker bool 589*58b9f456SAndroid Build Coastguard Worker regex_search(const charT* str, match_results<const charT*, Allocator>& m, 590*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 591*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 592*58b9f456SAndroid Build Coastguard Worker 593*58b9f456SAndroid Build Coastguard Workertemplate <class charT, class traits> 594*58b9f456SAndroid Build Coastguard Worker bool 595*58b9f456SAndroid Build Coastguard Worker regex_search(const charT* str, const basic_regex<charT, traits>& e, 596*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 597*58b9f456SAndroid Build Coastguard Worker 598*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class charT, class traits> 599*58b9f456SAndroid Build Coastguard Worker bool 600*58b9f456SAndroid Build Coastguard Worker regex_search(const basic_string<charT, ST, SA>& s, 601*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 602*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 603*58b9f456SAndroid Build Coastguard Worker 604*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class Allocator, class charT, class traits> 605*58b9f456SAndroid Build Coastguard Worker bool 606*58b9f456SAndroid Build Coastguard Worker regex_search(const basic_string<charT, ST, SA>& s, 607*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, 608*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 609*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 610*58b9f456SAndroid Build Coastguard Worker 611*58b9f456SAndroid Build Coastguard Workertemplate <class ST, class SA, class Allocator, class charT, class traits> 612*58b9f456SAndroid Build Coastguard Worker bool 613*58b9f456SAndroid Build Coastguard Worker regex_search(const basic_string<charT, ST, SA>&& s, 614*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m, 615*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 616*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default) = delete; // C++14 617*58b9f456SAndroid Build Coastguard Worker 618*58b9f456SAndroid Build Coastguard Workertemplate <class OutputIterator, class BidirectionalIterator, 619*58b9f456SAndroid Build Coastguard Worker class traits, class charT, class ST, class SA> 620*58b9f456SAndroid Build Coastguard Worker OutputIterator 621*58b9f456SAndroid Build Coastguard Worker regex_replace(OutputIterator out, 622*58b9f456SAndroid Build Coastguard Worker BidirectionalIterator first, BidirectionalIterator last, 623*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 624*58b9f456SAndroid Build Coastguard Worker const basic_string<charT, ST, SA>& fmt, 625*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 626*58b9f456SAndroid Build Coastguard Worker 627*58b9f456SAndroid Build Coastguard Workertemplate <class OutputIterator, class BidirectionalIterator, 628*58b9f456SAndroid Build Coastguard Worker class traits, class charT> 629*58b9f456SAndroid Build Coastguard Worker OutputIterator 630*58b9f456SAndroid Build Coastguard Worker regex_replace(OutputIterator out, 631*58b9f456SAndroid Build Coastguard Worker BidirectionalIterator first, BidirectionalIterator last, 632*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, const charT* fmt, 633*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 634*58b9f456SAndroid Build Coastguard Worker 635*58b9f456SAndroid Build Coastguard Workertemplate <class traits, class charT, class ST, class SA, class FST, class FSA>> 636*58b9f456SAndroid Build Coastguard Worker basic_string<charT, ST, SA> 637*58b9f456SAndroid Build Coastguard Worker regex_replace(const basic_string<charT, ST, SA>& s, 638*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 639*58b9f456SAndroid Build Coastguard Worker const basic_string<charT, FST, FSA>& fmt, 640*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 641*58b9f456SAndroid Build Coastguard Worker 642*58b9f456SAndroid Build Coastguard Workertemplate <class traits, class charT, class ST, class SA> 643*58b9f456SAndroid Build Coastguard Worker basic_string<charT, ST, SA> 644*58b9f456SAndroid Build Coastguard Worker regex_replace(const basic_string<charT, ST, SA>& s, 645*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, const charT* fmt, 646*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 647*58b9f456SAndroid Build Coastguard Worker 648*58b9f456SAndroid Build Coastguard Workertemplate <class traits, class charT, class ST, class SA> 649*58b9f456SAndroid Build Coastguard Worker basic_string<charT> 650*58b9f456SAndroid Build Coastguard Worker regex_replace(const charT* s, 651*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 652*58b9f456SAndroid Build Coastguard Worker const basic_string<charT, ST, SA>& fmt, 653*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 654*58b9f456SAndroid Build Coastguard Worker 655*58b9f456SAndroid Build Coastguard Workertemplate <class traits, class charT> 656*58b9f456SAndroid Build Coastguard Worker basic_string<charT> 657*58b9f456SAndroid Build Coastguard Worker regex_replace(const charT* s, 658*58b9f456SAndroid Build Coastguard Worker const basic_regex<charT, traits>& e, 659*58b9f456SAndroid Build Coastguard Worker const charT* fmt, 660*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type flags = regex_constants::match_default); 661*58b9f456SAndroid Build Coastguard Worker 662*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, 663*58b9f456SAndroid Build Coastguard Worker class charT = typename iterator_traits< BidirectionalIterator>::value_type, 664*58b9f456SAndroid Build Coastguard Worker class traits = regex_traits<charT>> 665*58b9f456SAndroid Build Coastguard Workerclass regex_iterator 666*58b9f456SAndroid Build Coastguard Worker{ 667*58b9f456SAndroid Build Coastguard Workerpublic: 668*58b9f456SAndroid Build Coastguard Worker typedef basic_regex<charT, traits> regex_type; 669*58b9f456SAndroid Build Coastguard Worker typedef match_results<BidirectionalIterator> value_type; 670*58b9f456SAndroid Build Coastguard Worker typedef ptrdiff_t difference_type; 671*58b9f456SAndroid Build Coastguard Worker typedef const value_type* pointer; 672*58b9f456SAndroid Build Coastguard Worker typedef const value_type& reference; 673*58b9f456SAndroid Build Coastguard Worker typedef forward_iterator_tag iterator_category; 674*58b9f456SAndroid Build Coastguard Worker 675*58b9f456SAndroid Build Coastguard Worker regex_iterator(); 676*58b9f456SAndroid Build Coastguard Worker regex_iterator(BidirectionalIterator a, BidirectionalIterator b, 677*58b9f456SAndroid Build Coastguard Worker const regex_type& re, 678*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default); 679*58b9f456SAndroid Build Coastguard Worker regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 680*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, 681*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m 682*58b9f456SAndroid Build Coastguard Worker = regex_constants::match_default) = delete; // C++14 683*58b9f456SAndroid Build Coastguard Worker regex_iterator(const regex_iterator&); 684*58b9f456SAndroid Build Coastguard Worker regex_iterator& operator=(const regex_iterator&); 685*58b9f456SAndroid Build Coastguard Worker 686*58b9f456SAndroid Build Coastguard Worker bool operator==(const regex_iterator&) const; 687*58b9f456SAndroid Build Coastguard Worker bool operator!=(const regex_iterator&) const; 688*58b9f456SAndroid Build Coastguard Worker 689*58b9f456SAndroid Build Coastguard Worker const value_type& operator*() const; 690*58b9f456SAndroid Build Coastguard Worker const value_type* operator->() const; 691*58b9f456SAndroid Build Coastguard Worker 692*58b9f456SAndroid Build Coastguard Worker regex_iterator& operator++(); 693*58b9f456SAndroid Build Coastguard Worker regex_iterator operator++(int); 694*58b9f456SAndroid Build Coastguard Worker}; 695*58b9f456SAndroid Build Coastguard Worker 696*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<const char*> cregex_iterator; 697*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<const wchar_t*> wcregex_iterator; 698*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<string::const_iterator> sregex_iterator; 699*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<wstring::const_iterator> wsregex_iterator; 700*58b9f456SAndroid Build Coastguard Worker 701*58b9f456SAndroid Build Coastguard Workertemplate <class BidirectionalIterator, 702*58b9f456SAndroid Build Coastguard Worker class charT = typename iterator_traits< BidirectionalIterator>::value_type, 703*58b9f456SAndroid Build Coastguard Worker class traits = regex_traits<charT>> 704*58b9f456SAndroid Build Coastguard Workerclass regex_token_iterator 705*58b9f456SAndroid Build Coastguard Worker{ 706*58b9f456SAndroid Build Coastguard Workerpublic: 707*58b9f456SAndroid Build Coastguard Worker typedef basic_regex<charT, traits> regex_type; 708*58b9f456SAndroid Build Coastguard Worker typedef sub_match<BidirectionalIterator> value_type; 709*58b9f456SAndroid Build Coastguard Worker typedef ptrdiff_t difference_type; 710*58b9f456SAndroid Build Coastguard Worker typedef const value_type* pointer; 711*58b9f456SAndroid Build Coastguard Worker typedef const value_type& reference; 712*58b9f456SAndroid Build Coastguard Worker typedef forward_iterator_tag iterator_category; 713*58b9f456SAndroid Build Coastguard Worker 714*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(); 715*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 716*58b9f456SAndroid Build Coastguard Worker const regex_type& re, int submatch = 0, 717*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default); 718*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 719*58b9f456SAndroid Build Coastguard Worker const regex_type&& re, int submatch = 0, 720*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14 721*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 722*58b9f456SAndroid Build Coastguard Worker const regex_type& re, const vector<int>& submatches, 723*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default); 724*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 725*58b9f456SAndroid Build Coastguard Worker const regex_type&& re, const vector<int>& submatches, 726*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14 727*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 728*58b9f456SAndroid Build Coastguard Worker const regex_type& re, initializer_list<int> submatches, 729*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default); 730*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 731*58b9f456SAndroid Build Coastguard Worker const regex_type&& re, initializer_list<int> submatches, 732*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14 733*58b9f456SAndroid Build Coastguard Worker template <size_t N> 734*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 735*58b9f456SAndroid Build Coastguard Worker const regex_type& re, const int (&submatches)[N], 736*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default); 737*58b9f456SAndroid Build Coastguard Worker template <size_t N> 738*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 739*58b9f456SAndroid Build Coastguard Worker const regex_type& re, const int (&submatches)[N], 740*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type m = regex_constants::match_default) = delete // C++14; 741*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(const regex_token_iterator&); 742*58b9f456SAndroid Build Coastguard Worker regex_token_iterator& operator=(const regex_token_iterator&); 743*58b9f456SAndroid Build Coastguard Worker 744*58b9f456SAndroid Build Coastguard Worker bool operator==(const regex_token_iterator&) const; 745*58b9f456SAndroid Build Coastguard Worker bool operator!=(const regex_token_iterator&) const; 746*58b9f456SAndroid Build Coastguard Worker 747*58b9f456SAndroid Build Coastguard Worker const value_type& operator*() const; 748*58b9f456SAndroid Build Coastguard Worker const value_type* operator->() const; 749*58b9f456SAndroid Build Coastguard Worker 750*58b9f456SAndroid Build Coastguard Worker regex_token_iterator& operator++(); 751*58b9f456SAndroid Build Coastguard Worker regex_token_iterator operator++(int); 752*58b9f456SAndroid Build Coastguard Worker}; 753*58b9f456SAndroid Build Coastguard Worker 754*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<const char*> cregex_token_iterator; 755*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<const wchar_t*> wcregex_token_iterator; 756*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<string::const_iterator> sregex_token_iterator; 757*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator; 758*58b9f456SAndroid Build Coastguard Worker 759*58b9f456SAndroid Build Coastguard Worker} // std 760*58b9f456SAndroid Build Coastguard Worker*/ 761*58b9f456SAndroid Build Coastguard Worker 762*58b9f456SAndroid Build Coastguard Worker#include <__config> 763*58b9f456SAndroid Build Coastguard Worker#include <stdexcept> 764*58b9f456SAndroid Build Coastguard Worker#include <__locale> 765*58b9f456SAndroid Build Coastguard Worker#include <initializer_list> 766*58b9f456SAndroid Build Coastguard Worker#include <utility> 767*58b9f456SAndroid Build Coastguard Worker#include <iterator> 768*58b9f456SAndroid Build Coastguard Worker#include <string> 769*58b9f456SAndroid Build Coastguard Worker#include <memory> 770*58b9f456SAndroid Build Coastguard Worker#include <vector> 771*58b9f456SAndroid Build Coastguard Worker#include <deque> 772*58b9f456SAndroid Build Coastguard Worker#include <version> 773*58b9f456SAndroid Build Coastguard Worker 774*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 775*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header 776*58b9f456SAndroid Build Coastguard Worker#endif 777*58b9f456SAndroid Build Coastguard Worker 778*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS 779*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros> 780*58b9f456SAndroid Build Coastguard Worker 781*58b9f456SAndroid Build Coastguard Worker 782*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_REGEX_COMPLEXITY_FACTOR 4096 783*58b9f456SAndroid Build Coastguard Worker 784*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD 785*58b9f456SAndroid Build Coastguard Worker 786*58b9f456SAndroid Build Coastguard Workernamespace regex_constants 787*58b9f456SAndroid Build Coastguard Worker{ 788*58b9f456SAndroid Build Coastguard Worker 789*58b9f456SAndroid Build Coastguard Worker// syntax_option_type 790*58b9f456SAndroid Build Coastguard Worker 791*58b9f456SAndroid Build Coastguard Workerenum syntax_option_type 792*58b9f456SAndroid Build Coastguard Worker{ 793*58b9f456SAndroid Build Coastguard Worker icase = 1 << 0, 794*58b9f456SAndroid Build Coastguard Worker nosubs = 1 << 1, 795*58b9f456SAndroid Build Coastguard Worker optimize = 1 << 2, 796*58b9f456SAndroid Build Coastguard Worker collate = 1 << 3, 797*58b9f456SAndroid Build Coastguard Worker ECMAScript = 0, 798*58b9f456SAndroid Build Coastguard Worker basic = 1 << 4, 799*58b9f456SAndroid Build Coastguard Worker extended = 1 << 5, 800*58b9f456SAndroid Build Coastguard Worker awk = 1 << 6, 801*58b9f456SAndroid Build Coastguard Worker grep = 1 << 7, 802*58b9f456SAndroid Build Coastguard Worker egrep = 1 << 8 803*58b9f456SAndroid Build Coastguard Worker}; 804*58b9f456SAndroid Build Coastguard Worker 805*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 806*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 807*58b9f456SAndroid Build Coastguard Workersyntax_option_type 808*58b9f456SAndroid Build Coastguard Workeroperator~(syntax_option_type __x) 809*58b9f456SAndroid Build Coastguard Worker{ 810*58b9f456SAndroid Build Coastguard Worker return syntax_option_type(~int(__x) & 0x1FF); 811*58b9f456SAndroid Build Coastguard Worker} 812*58b9f456SAndroid Build Coastguard Worker 813*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 814*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 815*58b9f456SAndroid Build Coastguard Workersyntax_option_type 816*58b9f456SAndroid Build Coastguard Workeroperator&(syntax_option_type __x, syntax_option_type __y) 817*58b9f456SAndroid Build Coastguard Worker{ 818*58b9f456SAndroid Build Coastguard Worker return syntax_option_type(int(__x) & int(__y)); 819*58b9f456SAndroid Build Coastguard Worker} 820*58b9f456SAndroid Build Coastguard Worker 821*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 822*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 823*58b9f456SAndroid Build Coastguard Workersyntax_option_type 824*58b9f456SAndroid Build Coastguard Workeroperator|(syntax_option_type __x, syntax_option_type __y) 825*58b9f456SAndroid Build Coastguard Worker{ 826*58b9f456SAndroid Build Coastguard Worker return syntax_option_type(int(__x) | int(__y)); 827*58b9f456SAndroid Build Coastguard Worker} 828*58b9f456SAndroid Build Coastguard Worker 829*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 830*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 831*58b9f456SAndroid Build Coastguard Workersyntax_option_type 832*58b9f456SAndroid Build Coastguard Workeroperator^(syntax_option_type __x, syntax_option_type __y) 833*58b9f456SAndroid Build Coastguard Worker{ 834*58b9f456SAndroid Build Coastguard Worker return syntax_option_type(int(__x) ^ int(__y)); 835*58b9f456SAndroid Build Coastguard Worker} 836*58b9f456SAndroid Build Coastguard Worker 837*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 838*58b9f456SAndroid Build Coastguard Workersyntax_option_type& 839*58b9f456SAndroid Build Coastguard Workeroperator&=(syntax_option_type& __x, syntax_option_type __y) 840*58b9f456SAndroid Build Coastguard Worker{ 841*58b9f456SAndroid Build Coastguard Worker __x = __x & __y; 842*58b9f456SAndroid Build Coastguard Worker return __x; 843*58b9f456SAndroid Build Coastguard Worker} 844*58b9f456SAndroid Build Coastguard Worker 845*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 846*58b9f456SAndroid Build Coastguard Workersyntax_option_type& 847*58b9f456SAndroid Build Coastguard Workeroperator|=(syntax_option_type& __x, syntax_option_type __y) 848*58b9f456SAndroid Build Coastguard Worker{ 849*58b9f456SAndroid Build Coastguard Worker __x = __x | __y; 850*58b9f456SAndroid Build Coastguard Worker return __x; 851*58b9f456SAndroid Build Coastguard Worker} 852*58b9f456SAndroid Build Coastguard Worker 853*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 854*58b9f456SAndroid Build Coastguard Workersyntax_option_type& 855*58b9f456SAndroid Build Coastguard Workeroperator^=(syntax_option_type& __x, syntax_option_type __y) 856*58b9f456SAndroid Build Coastguard Worker{ 857*58b9f456SAndroid Build Coastguard Worker __x = __x ^ __y; 858*58b9f456SAndroid Build Coastguard Worker return __x; 859*58b9f456SAndroid Build Coastguard Worker} 860*58b9f456SAndroid Build Coastguard Worker 861*58b9f456SAndroid Build Coastguard Worker// match_flag_type 862*58b9f456SAndroid Build Coastguard Worker 863*58b9f456SAndroid Build Coastguard Workerenum match_flag_type 864*58b9f456SAndroid Build Coastguard Worker{ 865*58b9f456SAndroid Build Coastguard Worker match_default = 0, 866*58b9f456SAndroid Build Coastguard Worker match_not_bol = 1 << 0, 867*58b9f456SAndroid Build Coastguard Worker match_not_eol = 1 << 1, 868*58b9f456SAndroid Build Coastguard Worker match_not_bow = 1 << 2, 869*58b9f456SAndroid Build Coastguard Worker match_not_eow = 1 << 3, 870*58b9f456SAndroid Build Coastguard Worker match_any = 1 << 4, 871*58b9f456SAndroid Build Coastguard Worker match_not_null = 1 << 5, 872*58b9f456SAndroid Build Coastguard Worker match_continuous = 1 << 6, 873*58b9f456SAndroid Build Coastguard Worker match_prev_avail = 1 << 7, 874*58b9f456SAndroid Build Coastguard Worker format_default = 0, 875*58b9f456SAndroid Build Coastguard Worker format_sed = 1 << 8, 876*58b9f456SAndroid Build Coastguard Worker format_no_copy = 1 << 9, 877*58b9f456SAndroid Build Coastguard Worker format_first_only = 1 << 10, 878*58b9f456SAndroid Build Coastguard Worker __no_update_pos = 1 << 11, 879*58b9f456SAndroid Build Coastguard Worker __full_match = 1 << 12 880*58b9f456SAndroid Build Coastguard Worker}; 881*58b9f456SAndroid Build Coastguard Worker 882*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 883*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 884*58b9f456SAndroid Build Coastguard Workermatch_flag_type 885*58b9f456SAndroid Build Coastguard Workeroperator~(match_flag_type __x) 886*58b9f456SAndroid Build Coastguard Worker{ 887*58b9f456SAndroid Build Coastguard Worker return match_flag_type(~int(__x) & 0x0FFF); 888*58b9f456SAndroid Build Coastguard Worker} 889*58b9f456SAndroid Build Coastguard Worker 890*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 891*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 892*58b9f456SAndroid Build Coastguard Workermatch_flag_type 893*58b9f456SAndroid Build Coastguard Workeroperator&(match_flag_type __x, match_flag_type __y) 894*58b9f456SAndroid Build Coastguard Worker{ 895*58b9f456SAndroid Build Coastguard Worker return match_flag_type(int(__x) & int(__y)); 896*58b9f456SAndroid Build Coastguard Worker} 897*58b9f456SAndroid Build Coastguard Worker 898*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 899*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 900*58b9f456SAndroid Build Coastguard Workermatch_flag_type 901*58b9f456SAndroid Build Coastguard Workeroperator|(match_flag_type __x, match_flag_type __y) 902*58b9f456SAndroid Build Coastguard Worker{ 903*58b9f456SAndroid Build Coastguard Worker return match_flag_type(int(__x) | int(__y)); 904*58b9f456SAndroid Build Coastguard Worker} 905*58b9f456SAndroid Build Coastguard Worker 906*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 907*58b9f456SAndroid Build Coastguard Worker_LIBCPP_CONSTEXPR 908*58b9f456SAndroid Build Coastguard Workermatch_flag_type 909*58b9f456SAndroid Build Coastguard Workeroperator^(match_flag_type __x, match_flag_type __y) 910*58b9f456SAndroid Build Coastguard Worker{ 911*58b9f456SAndroid Build Coastguard Worker return match_flag_type(int(__x) ^ int(__y)); 912*58b9f456SAndroid Build Coastguard Worker} 913*58b9f456SAndroid Build Coastguard Worker 914*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 915*58b9f456SAndroid Build Coastguard Workermatch_flag_type& 916*58b9f456SAndroid Build Coastguard Workeroperator&=(match_flag_type& __x, match_flag_type __y) 917*58b9f456SAndroid Build Coastguard Worker{ 918*58b9f456SAndroid Build Coastguard Worker __x = __x & __y; 919*58b9f456SAndroid Build Coastguard Worker return __x; 920*58b9f456SAndroid Build Coastguard Worker} 921*58b9f456SAndroid Build Coastguard Worker 922*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 923*58b9f456SAndroid Build Coastguard Workermatch_flag_type& 924*58b9f456SAndroid Build Coastguard Workeroperator|=(match_flag_type& __x, match_flag_type __y) 925*58b9f456SAndroid Build Coastguard Worker{ 926*58b9f456SAndroid Build Coastguard Worker __x = __x | __y; 927*58b9f456SAndroid Build Coastguard Worker return __x; 928*58b9f456SAndroid Build Coastguard Worker} 929*58b9f456SAndroid Build Coastguard Worker 930*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 931*58b9f456SAndroid Build Coastguard Workermatch_flag_type& 932*58b9f456SAndroid Build Coastguard Workeroperator^=(match_flag_type& __x, match_flag_type __y) 933*58b9f456SAndroid Build Coastguard Worker{ 934*58b9f456SAndroid Build Coastguard Worker __x = __x ^ __y; 935*58b9f456SAndroid Build Coastguard Worker return __x; 936*58b9f456SAndroid Build Coastguard Worker} 937*58b9f456SAndroid Build Coastguard Worker 938*58b9f456SAndroid Build Coastguard Workerenum error_type 939*58b9f456SAndroid Build Coastguard Worker{ 940*58b9f456SAndroid Build Coastguard Worker error_collate = 1, 941*58b9f456SAndroid Build Coastguard Worker error_ctype, 942*58b9f456SAndroid Build Coastguard Worker error_escape, 943*58b9f456SAndroid Build Coastguard Worker error_backref, 944*58b9f456SAndroid Build Coastguard Worker error_brack, 945*58b9f456SAndroid Build Coastguard Worker error_paren, 946*58b9f456SAndroid Build Coastguard Worker error_brace, 947*58b9f456SAndroid Build Coastguard Worker error_badbrace, 948*58b9f456SAndroid Build Coastguard Worker error_range, 949*58b9f456SAndroid Build Coastguard Worker error_space, 950*58b9f456SAndroid Build Coastguard Worker error_badrepeat, 951*58b9f456SAndroid Build Coastguard Worker error_complexity, 952*58b9f456SAndroid Build Coastguard Worker error_stack, 953*58b9f456SAndroid Build Coastguard Worker __re_err_grammar, 954*58b9f456SAndroid Build Coastguard Worker __re_err_empty, 955*58b9f456SAndroid Build Coastguard Worker __re_err_unknown 956*58b9f456SAndroid Build Coastguard Worker}; 957*58b9f456SAndroid Build Coastguard Worker 958*58b9f456SAndroid Build Coastguard Worker} // regex_constants 959*58b9f456SAndroid Build Coastguard Worker 960*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_EXCEPTION_ABI regex_error 961*58b9f456SAndroid Build Coastguard Worker : public runtime_error 962*58b9f456SAndroid Build Coastguard Worker{ 963*58b9f456SAndroid Build Coastguard Worker regex_constants::error_type __code_; 964*58b9f456SAndroid Build Coastguard Workerpublic: 965*58b9f456SAndroid Build Coastguard Worker explicit regex_error(regex_constants::error_type __ecode); 966*58b9f456SAndroid Build Coastguard Worker virtual ~regex_error() throw(); 967*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 968*58b9f456SAndroid Build Coastguard Worker regex_constants::error_type code() const {return __code_;} 969*58b9f456SAndroid Build Coastguard Worker}; 970*58b9f456SAndroid Build Coastguard Worker 971*58b9f456SAndroid Build Coastguard Workertemplate <regex_constants::error_type _Ev> 972*58b9f456SAndroid Build Coastguard Worker_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 973*58b9f456SAndroid Build Coastguard Workervoid __throw_regex_error() 974*58b9f456SAndroid Build Coastguard Worker{ 975*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 976*58b9f456SAndroid Build Coastguard Worker throw regex_error(_Ev); 977*58b9f456SAndroid Build Coastguard Worker#else 978*58b9f456SAndroid Build Coastguard Worker _VSTD::abort(); 979*58b9f456SAndroid Build Coastguard Worker#endif 980*58b9f456SAndroid Build Coastguard Worker} 981*58b9f456SAndroid Build Coastguard Worker 982*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 983*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS regex_traits 984*58b9f456SAndroid Build Coastguard Worker{ 985*58b9f456SAndroid Build Coastguard Workerpublic: 986*58b9f456SAndroid Build Coastguard Worker typedef _CharT char_type; 987*58b9f456SAndroid Build Coastguard Worker typedef basic_string<char_type> string_type; 988*58b9f456SAndroid Build Coastguard Worker typedef locale locale_type; 989*58b9f456SAndroid Build Coastguard Worker#ifdef __BIONIC__ 990*58b9f456SAndroid Build Coastguard Worker typedef uint16_t char_class_type; 991*58b9f456SAndroid Build Coastguard Worker#else 992*58b9f456SAndroid Build Coastguard Worker typedef ctype_base::mask char_class_type; 993*58b9f456SAndroid Build Coastguard Worker#endif 994*58b9f456SAndroid Build Coastguard Worker 995*58b9f456SAndroid Build Coastguard Worker#ifdef __BIONIC__ 996*58b9f456SAndroid Build Coastguard Worker static const char_class_type __regex_word = 0x8000; 997*58b9f456SAndroid Build Coastguard Worker#elif defined(__mips__) && defined(__GLIBC__) 998*58b9f456SAndroid Build Coastguard Worker static const char_class_type __regex_word = static_cast<char_class_type>(_ISbit(15)); 999*58b9f456SAndroid Build Coastguard Worker#elif defined(__NetBSD__) 1000*58b9f456SAndroid Build Coastguard Worker // NetBSD defines classes up to 0x2000 1001*58b9f456SAndroid Build Coastguard Worker // see sys/ctype_bits.h, _CTYPE_Q 1002*58b9f456SAndroid Build Coastguard Worker static const char_class_type __regex_word = 0x8000; 1003*58b9f456SAndroid Build Coastguard Worker#else 1004*58b9f456SAndroid Build Coastguard Worker static const char_class_type __regex_word = 0x80; 1005*58b9f456SAndroid Build Coastguard Worker#endif 1006*58b9f456SAndroid Build Coastguard Worker 1007*58b9f456SAndroid Build Coastguard Workerprivate: 1008*58b9f456SAndroid Build Coastguard Worker locale __loc_; 1009*58b9f456SAndroid Build Coastguard Worker const ctype<char_type>* __ct_; 1010*58b9f456SAndroid Build Coastguard Worker const collate<char_type>* __col_; 1011*58b9f456SAndroid Build Coastguard Worker 1012*58b9f456SAndroid Build Coastguard Workerpublic: 1013*58b9f456SAndroid Build Coastguard Worker regex_traits(); 1014*58b9f456SAndroid Build Coastguard Worker 1015*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1016*58b9f456SAndroid Build Coastguard Worker static size_t length(const char_type* __p) 1017*58b9f456SAndroid Build Coastguard Worker {return char_traits<char_type>::length(__p);} 1018*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1019*58b9f456SAndroid Build Coastguard Worker char_type translate(char_type __c) const {return __c;} 1020*58b9f456SAndroid Build Coastguard Worker char_type translate_nocase(char_type __c) const; 1021*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1022*58b9f456SAndroid Build Coastguard Worker string_type 1023*58b9f456SAndroid Build Coastguard Worker transform(_ForwardIterator __f, _ForwardIterator __l) const; 1024*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1025*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1026*58b9f456SAndroid Build Coastguard Worker string_type 1027*58b9f456SAndroid Build Coastguard Worker transform_primary( _ForwardIterator __f, _ForwardIterator __l) const 1028*58b9f456SAndroid Build Coastguard Worker {return __transform_primary(__f, __l, char_type());} 1029*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1030*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1031*58b9f456SAndroid Build Coastguard Worker string_type 1032*58b9f456SAndroid Build Coastguard Worker lookup_collatename(_ForwardIterator __f, _ForwardIterator __l) const 1033*58b9f456SAndroid Build Coastguard Worker {return __lookup_collatename(__f, __l, char_type());} 1034*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1035*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1036*58b9f456SAndroid Build Coastguard Worker char_class_type 1037*58b9f456SAndroid Build Coastguard Worker lookup_classname(_ForwardIterator __f, _ForwardIterator __l, 1038*58b9f456SAndroid Build Coastguard Worker bool __icase = false) const 1039*58b9f456SAndroid Build Coastguard Worker {return __lookup_classname(__f, __l, __icase, char_type());} 1040*58b9f456SAndroid Build Coastguard Worker bool isctype(char_type __c, char_class_type __m) const; 1041*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1042*58b9f456SAndroid Build Coastguard Worker int value(char_type __ch, int __radix) const 1043*58b9f456SAndroid Build Coastguard Worker {return __regex_traits_value(__ch, __radix);} 1044*58b9f456SAndroid Build Coastguard Worker locale_type imbue(locale_type __l); 1045*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1046*58b9f456SAndroid Build Coastguard Worker locale_type getloc()const {return __loc_;} 1047*58b9f456SAndroid Build Coastguard Worker 1048*58b9f456SAndroid Build Coastguard Workerprivate: 1049*58b9f456SAndroid Build Coastguard Worker void __init(); 1050*58b9f456SAndroid Build Coastguard Worker 1051*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1052*58b9f456SAndroid Build Coastguard Worker string_type 1053*58b9f456SAndroid Build Coastguard Worker __transform_primary(_ForwardIterator __f, _ForwardIterator __l, char) const; 1054*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1055*58b9f456SAndroid Build Coastguard Worker string_type 1056*58b9f456SAndroid Build Coastguard Worker __transform_primary(_ForwardIterator __f, _ForwardIterator __l, wchar_t) const; 1057*58b9f456SAndroid Build Coastguard Worker 1058*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1059*58b9f456SAndroid Build Coastguard Worker string_type 1060*58b9f456SAndroid Build Coastguard Worker __lookup_collatename(_ForwardIterator __f, _ForwardIterator __l, char) const; 1061*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1062*58b9f456SAndroid Build Coastguard Worker string_type 1063*58b9f456SAndroid Build Coastguard Worker __lookup_collatename(_ForwardIterator __f, _ForwardIterator __l, wchar_t) const; 1064*58b9f456SAndroid Build Coastguard Worker 1065*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1066*58b9f456SAndroid Build Coastguard Worker char_class_type 1067*58b9f456SAndroid Build Coastguard Worker __lookup_classname(_ForwardIterator __f, _ForwardIterator __l, 1068*58b9f456SAndroid Build Coastguard Worker bool __icase, char) const; 1069*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1070*58b9f456SAndroid Build Coastguard Worker char_class_type 1071*58b9f456SAndroid Build Coastguard Worker __lookup_classname(_ForwardIterator __f, _ForwardIterator __l, 1072*58b9f456SAndroid Build Coastguard Worker bool __icase, wchar_t) const; 1073*58b9f456SAndroid Build Coastguard Worker 1074*58b9f456SAndroid Build Coastguard Worker static int __regex_traits_value(unsigned char __ch, int __radix); 1075*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1076*58b9f456SAndroid Build Coastguard Worker int __regex_traits_value(char __ch, int __radix) const 1077*58b9f456SAndroid Build Coastguard Worker {return __regex_traits_value(static_cast<unsigned char>(__ch), __radix);} 1078*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1079*58b9f456SAndroid Build Coastguard Worker int __regex_traits_value(wchar_t __ch, int __radix) const; 1080*58b9f456SAndroid Build Coastguard Worker}; 1081*58b9f456SAndroid Build Coastguard Worker 1082*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1083*58b9f456SAndroid Build Coastguard Workerconst typename regex_traits<_CharT>::char_class_type 1084*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__regex_word; 1085*58b9f456SAndroid Build Coastguard Worker 1086*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1087*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::regex_traits() 1088*58b9f456SAndroid Build Coastguard Worker{ 1089*58b9f456SAndroid Build Coastguard Worker __init(); 1090*58b9f456SAndroid Build Coastguard Worker} 1091*58b9f456SAndroid Build Coastguard Worker 1092*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1093*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::char_type 1094*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::translate_nocase(char_type __c) const 1095*58b9f456SAndroid Build Coastguard Worker{ 1096*58b9f456SAndroid Build Coastguard Worker return __ct_->tolower(__c); 1097*58b9f456SAndroid Build Coastguard Worker} 1098*58b9f456SAndroid Build Coastguard Worker 1099*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1100*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1101*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::string_type 1102*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::transform(_ForwardIterator __f, _ForwardIterator __l) const 1103*58b9f456SAndroid Build Coastguard Worker{ 1104*58b9f456SAndroid Build Coastguard Worker string_type __s(__f, __l); 1105*58b9f456SAndroid Build Coastguard Worker return __col_->transform(__s.data(), __s.data() + __s.size()); 1106*58b9f456SAndroid Build Coastguard Worker} 1107*58b9f456SAndroid Build Coastguard Worker 1108*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1109*58b9f456SAndroid Build Coastguard Workervoid 1110*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__init() 1111*58b9f456SAndroid Build Coastguard Worker{ 1112*58b9f456SAndroid Build Coastguard Worker __ct_ = &use_facet<ctype<char_type> >(__loc_); 1113*58b9f456SAndroid Build Coastguard Worker __col_ = &use_facet<collate<char_type> >(__loc_); 1114*58b9f456SAndroid Build Coastguard Worker} 1115*58b9f456SAndroid Build Coastguard Worker 1116*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1117*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::locale_type 1118*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::imbue(locale_type __l) 1119*58b9f456SAndroid Build Coastguard Worker{ 1120*58b9f456SAndroid Build Coastguard Worker locale __r = __loc_; 1121*58b9f456SAndroid Build Coastguard Worker __loc_ = __l; 1122*58b9f456SAndroid Build Coastguard Worker __init(); 1123*58b9f456SAndroid Build Coastguard Worker return __r; 1124*58b9f456SAndroid Build Coastguard Worker} 1125*58b9f456SAndroid Build Coastguard Worker 1126*58b9f456SAndroid Build Coastguard Worker// transform_primary is very FreeBSD-specific 1127*58b9f456SAndroid Build Coastguard Worker 1128*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1129*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1130*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::string_type 1131*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__transform_primary(_ForwardIterator __f, 1132*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, char) const 1133*58b9f456SAndroid Build Coastguard Worker{ 1134*58b9f456SAndroid Build Coastguard Worker const string_type __s(__f, __l); 1135*58b9f456SAndroid Build Coastguard Worker string_type __d = __col_->transform(__s.data(), __s.data() + __s.size()); 1136*58b9f456SAndroid Build Coastguard Worker switch (__d.size()) 1137*58b9f456SAndroid Build Coastguard Worker { 1138*58b9f456SAndroid Build Coastguard Worker case 1: 1139*58b9f456SAndroid Build Coastguard Worker break; 1140*58b9f456SAndroid Build Coastguard Worker case 12: 1141*58b9f456SAndroid Build Coastguard Worker __d[11] = __d[3]; 1142*58b9f456SAndroid Build Coastguard Worker break; 1143*58b9f456SAndroid Build Coastguard Worker default: 1144*58b9f456SAndroid Build Coastguard Worker __d.clear(); 1145*58b9f456SAndroid Build Coastguard Worker break; 1146*58b9f456SAndroid Build Coastguard Worker } 1147*58b9f456SAndroid Build Coastguard Worker return __d; 1148*58b9f456SAndroid Build Coastguard Worker} 1149*58b9f456SAndroid Build Coastguard Worker 1150*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1151*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1152*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::string_type 1153*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__transform_primary(_ForwardIterator __f, 1154*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, wchar_t) const 1155*58b9f456SAndroid Build Coastguard Worker{ 1156*58b9f456SAndroid Build Coastguard Worker const string_type __s(__f, __l); 1157*58b9f456SAndroid Build Coastguard Worker string_type __d = __col_->transform(__s.data(), __s.data() + __s.size()); 1158*58b9f456SAndroid Build Coastguard Worker switch (__d.size()) 1159*58b9f456SAndroid Build Coastguard Worker { 1160*58b9f456SAndroid Build Coastguard Worker case 1: 1161*58b9f456SAndroid Build Coastguard Worker break; 1162*58b9f456SAndroid Build Coastguard Worker case 3: 1163*58b9f456SAndroid Build Coastguard Worker __d[2] = __d[0]; 1164*58b9f456SAndroid Build Coastguard Worker break; 1165*58b9f456SAndroid Build Coastguard Worker default: 1166*58b9f456SAndroid Build Coastguard Worker __d.clear(); 1167*58b9f456SAndroid Build Coastguard Worker break; 1168*58b9f456SAndroid Build Coastguard Worker } 1169*58b9f456SAndroid Build Coastguard Worker return __d; 1170*58b9f456SAndroid Build Coastguard Worker} 1171*58b9f456SAndroid Build Coastguard Worker 1172*58b9f456SAndroid Build Coastguard Worker// lookup_collatename is very FreeBSD-specific 1173*58b9f456SAndroid Build Coastguard Worker 1174*58b9f456SAndroid Build Coastguard Worker_LIBCPP_FUNC_VIS string __get_collation_name(const char* __s); 1175*58b9f456SAndroid Build Coastguard Worker 1176*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1177*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1178*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::string_type 1179*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__lookup_collatename(_ForwardIterator __f, 1180*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, char) const 1181*58b9f456SAndroid Build Coastguard Worker{ 1182*58b9f456SAndroid Build Coastguard Worker string_type __s(__f, __l); 1183*58b9f456SAndroid Build Coastguard Worker string_type __r; 1184*58b9f456SAndroid Build Coastguard Worker if (!__s.empty()) 1185*58b9f456SAndroid Build Coastguard Worker { 1186*58b9f456SAndroid Build Coastguard Worker __r = __get_collation_name(__s.c_str()); 1187*58b9f456SAndroid Build Coastguard Worker if (__r.empty() && __s.size() <= 2) 1188*58b9f456SAndroid Build Coastguard Worker { 1189*58b9f456SAndroid Build Coastguard Worker __r = __col_->transform(__s.data(), __s.data() + __s.size()); 1190*58b9f456SAndroid Build Coastguard Worker if (__r.size() == 1 || __r.size() == 12) 1191*58b9f456SAndroid Build Coastguard Worker __r = __s; 1192*58b9f456SAndroid Build Coastguard Worker else 1193*58b9f456SAndroid Build Coastguard Worker __r.clear(); 1194*58b9f456SAndroid Build Coastguard Worker } 1195*58b9f456SAndroid Build Coastguard Worker } 1196*58b9f456SAndroid Build Coastguard Worker return __r; 1197*58b9f456SAndroid Build Coastguard Worker} 1198*58b9f456SAndroid Build Coastguard Worker 1199*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1200*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1201*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::string_type 1202*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__lookup_collatename(_ForwardIterator __f, 1203*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, wchar_t) const 1204*58b9f456SAndroid Build Coastguard Worker{ 1205*58b9f456SAndroid Build Coastguard Worker string_type __s(__f, __l); 1206*58b9f456SAndroid Build Coastguard Worker string __n; 1207*58b9f456SAndroid Build Coastguard Worker __n.reserve(__s.size()); 1208*58b9f456SAndroid Build Coastguard Worker for (typename string_type::const_iterator __i = __s.begin(), __e = __s.end(); 1209*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i) 1210*58b9f456SAndroid Build Coastguard Worker { 1211*58b9f456SAndroid Build Coastguard Worker if (static_cast<unsigned>(*__i) >= 127) 1212*58b9f456SAndroid Build Coastguard Worker return string_type(); 1213*58b9f456SAndroid Build Coastguard Worker __n.push_back(char(*__i)); 1214*58b9f456SAndroid Build Coastguard Worker } 1215*58b9f456SAndroid Build Coastguard Worker string_type __r; 1216*58b9f456SAndroid Build Coastguard Worker if (!__s.empty()) 1217*58b9f456SAndroid Build Coastguard Worker { 1218*58b9f456SAndroid Build Coastguard Worker __n = __get_collation_name(__n.c_str()); 1219*58b9f456SAndroid Build Coastguard Worker if (!__n.empty()) 1220*58b9f456SAndroid Build Coastguard Worker __r.assign(__n.begin(), __n.end()); 1221*58b9f456SAndroid Build Coastguard Worker else if (__s.size() <= 2) 1222*58b9f456SAndroid Build Coastguard Worker { 1223*58b9f456SAndroid Build Coastguard Worker __r = __col_->transform(__s.data(), __s.data() + __s.size()); 1224*58b9f456SAndroid Build Coastguard Worker if (__r.size() == 1 || __r.size() == 3) 1225*58b9f456SAndroid Build Coastguard Worker __r = __s; 1226*58b9f456SAndroid Build Coastguard Worker else 1227*58b9f456SAndroid Build Coastguard Worker __r.clear(); 1228*58b9f456SAndroid Build Coastguard Worker } 1229*58b9f456SAndroid Build Coastguard Worker } 1230*58b9f456SAndroid Build Coastguard Worker return __r; 1231*58b9f456SAndroid Build Coastguard Worker} 1232*58b9f456SAndroid Build Coastguard Worker 1233*58b9f456SAndroid Build Coastguard Worker// lookup_classname 1234*58b9f456SAndroid Build Coastguard Worker 1235*58b9f456SAndroid Build Coastguard Workerregex_traits<char>::char_class_type _LIBCPP_FUNC_VIS 1236*58b9f456SAndroid Build Coastguard Worker__get_classname(const char* __s, bool __icase); 1237*58b9f456SAndroid Build Coastguard Worker 1238*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1239*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1240*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::char_class_type 1241*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__lookup_classname(_ForwardIterator __f, 1242*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, 1243*58b9f456SAndroid Build Coastguard Worker bool __icase, char) const 1244*58b9f456SAndroid Build Coastguard Worker{ 1245*58b9f456SAndroid Build Coastguard Worker string_type __s(__f, __l); 1246*58b9f456SAndroid Build Coastguard Worker __ct_->tolower(&__s[0], &__s[0] + __s.size()); 1247*58b9f456SAndroid Build Coastguard Worker return __get_classname(__s.c_str(), __icase); 1248*58b9f456SAndroid Build Coastguard Worker} 1249*58b9f456SAndroid Build Coastguard Worker 1250*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1251*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 1252*58b9f456SAndroid Build Coastguard Workertypename regex_traits<_CharT>::char_class_type 1253*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__lookup_classname(_ForwardIterator __f, 1254*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __l, 1255*58b9f456SAndroid Build Coastguard Worker bool __icase, wchar_t) const 1256*58b9f456SAndroid Build Coastguard Worker{ 1257*58b9f456SAndroid Build Coastguard Worker string_type __s(__f, __l); 1258*58b9f456SAndroid Build Coastguard Worker __ct_->tolower(&__s[0], &__s[0] + __s.size()); 1259*58b9f456SAndroid Build Coastguard Worker string __n; 1260*58b9f456SAndroid Build Coastguard Worker __n.reserve(__s.size()); 1261*58b9f456SAndroid Build Coastguard Worker for (typename string_type::const_iterator __i = __s.begin(), __e = __s.end(); 1262*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i) 1263*58b9f456SAndroid Build Coastguard Worker { 1264*58b9f456SAndroid Build Coastguard Worker if (static_cast<unsigned>(*__i) >= 127) 1265*58b9f456SAndroid Build Coastguard Worker return char_class_type(); 1266*58b9f456SAndroid Build Coastguard Worker __n.push_back(char(*__i)); 1267*58b9f456SAndroid Build Coastguard Worker } 1268*58b9f456SAndroid Build Coastguard Worker return __get_classname(__n.c_str(), __icase); 1269*58b9f456SAndroid Build Coastguard Worker} 1270*58b9f456SAndroid Build Coastguard Worker 1271*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1272*58b9f456SAndroid Build Coastguard Workerbool 1273*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::isctype(char_type __c, char_class_type __m) const 1274*58b9f456SAndroid Build Coastguard Worker{ 1275*58b9f456SAndroid Build Coastguard Worker if (__ct_->is(__m, __c)) 1276*58b9f456SAndroid Build Coastguard Worker return true; 1277*58b9f456SAndroid Build Coastguard Worker return (__c == '_' && (__m & __regex_word)); 1278*58b9f456SAndroid Build Coastguard Worker} 1279*58b9f456SAndroid Build Coastguard Worker 1280*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1281*58b9f456SAndroid Build Coastguard Workerint 1282*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__regex_traits_value(unsigned char __ch, int __radix) 1283*58b9f456SAndroid Build Coastguard Worker{ 1284*58b9f456SAndroid Build Coastguard Worker if ((__ch & 0xF8u) == 0x30) // '0' <= __ch && __ch <= '7' 1285*58b9f456SAndroid Build Coastguard Worker return __ch - '0'; 1286*58b9f456SAndroid Build Coastguard Worker if (__radix != 8) 1287*58b9f456SAndroid Build Coastguard Worker { 1288*58b9f456SAndroid Build Coastguard Worker if ((__ch & 0xFEu) == 0x38) // '8' <= __ch && __ch <= '9' 1289*58b9f456SAndroid Build Coastguard Worker return __ch - '0'; 1290*58b9f456SAndroid Build Coastguard Worker if (__radix == 16) 1291*58b9f456SAndroid Build Coastguard Worker { 1292*58b9f456SAndroid Build Coastguard Worker __ch |= 0x20; // tolower 1293*58b9f456SAndroid Build Coastguard Worker if ('a' <= __ch && __ch <= 'f') 1294*58b9f456SAndroid Build Coastguard Worker return __ch - ('a' - 10); 1295*58b9f456SAndroid Build Coastguard Worker } 1296*58b9f456SAndroid Build Coastguard Worker } 1297*58b9f456SAndroid Build Coastguard Worker return -1; 1298*58b9f456SAndroid Build Coastguard Worker} 1299*58b9f456SAndroid Build Coastguard Worker 1300*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1301*58b9f456SAndroid Build Coastguard Workerinline 1302*58b9f456SAndroid Build Coastguard Workerint 1303*58b9f456SAndroid Build Coastguard Workerregex_traits<_CharT>::__regex_traits_value(wchar_t __ch, int __radix) const 1304*58b9f456SAndroid Build Coastguard Worker{ 1305*58b9f456SAndroid Build Coastguard Worker return __regex_traits_value(static_cast<unsigned char>(__ct_->narrow(__ch, char_type())), __radix); 1306*58b9f456SAndroid Build Coastguard Worker} 1307*58b9f456SAndroid Build Coastguard Worker 1308*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> class __node; 1309*58b9f456SAndroid Build Coastguard Worker 1310*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator> class _LIBCPP_TEMPLATE_VIS sub_match; 1311*58b9f456SAndroid Build Coastguard Worker 1312*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, 1313*58b9f456SAndroid Build Coastguard Worker class _Allocator = allocator<sub_match<_BidirectionalIterator> > > 1314*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS match_results; 1315*58b9f456SAndroid Build Coastguard Worker 1316*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1317*58b9f456SAndroid Build Coastguard Workerstruct __state 1318*58b9f456SAndroid Build Coastguard Worker{ 1319*58b9f456SAndroid Build Coastguard Worker enum 1320*58b9f456SAndroid Build Coastguard Worker { 1321*58b9f456SAndroid Build Coastguard Worker __end_state = -1000, 1322*58b9f456SAndroid Build Coastguard Worker __consume_input, // -999 1323*58b9f456SAndroid Build Coastguard Worker __begin_marked_expr, // -998 1324*58b9f456SAndroid Build Coastguard Worker __end_marked_expr, // -997 1325*58b9f456SAndroid Build Coastguard Worker __pop_state, // -996 1326*58b9f456SAndroid Build Coastguard Worker __accept_and_consume, // -995 1327*58b9f456SAndroid Build Coastguard Worker __accept_but_not_consume, // -994 1328*58b9f456SAndroid Build Coastguard Worker __reject, // -993 1329*58b9f456SAndroid Build Coastguard Worker __split, 1330*58b9f456SAndroid Build Coastguard Worker __repeat 1331*58b9f456SAndroid Build Coastguard Worker }; 1332*58b9f456SAndroid Build Coastguard Worker 1333*58b9f456SAndroid Build Coastguard Worker int __do_; 1334*58b9f456SAndroid Build Coastguard Worker const _CharT* __first_; 1335*58b9f456SAndroid Build Coastguard Worker const _CharT* __current_; 1336*58b9f456SAndroid Build Coastguard Worker const _CharT* __last_; 1337*58b9f456SAndroid Build Coastguard Worker vector<sub_match<const _CharT*> > __sub_matches_; 1338*58b9f456SAndroid Build Coastguard Worker vector<pair<size_t, const _CharT*> > __loop_data_; 1339*58b9f456SAndroid Build Coastguard Worker const __node<_CharT>* __node_; 1340*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags_; 1341*58b9f456SAndroid Build Coastguard Worker bool __at_first_; 1342*58b9f456SAndroid Build Coastguard Worker 1343*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1344*58b9f456SAndroid Build Coastguard Worker __state() 1345*58b9f456SAndroid Build Coastguard Worker : __do_(0), __first_(nullptr), __current_(nullptr), __last_(nullptr), 1346*58b9f456SAndroid Build Coastguard Worker __node_(nullptr), __flags_() {} 1347*58b9f456SAndroid Build Coastguard Worker}; 1348*58b9f456SAndroid Build Coastguard Worker 1349*58b9f456SAndroid Build Coastguard Worker// __node 1350*58b9f456SAndroid Build Coastguard Worker 1351*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1352*58b9f456SAndroid Build Coastguard Workerclass __node 1353*58b9f456SAndroid Build Coastguard Worker{ 1354*58b9f456SAndroid Build Coastguard Worker __node(const __node&); 1355*58b9f456SAndroid Build Coastguard Worker __node& operator=(const __node&); 1356*58b9f456SAndroid Build Coastguard Workerpublic: 1357*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1358*58b9f456SAndroid Build Coastguard Worker 1359*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1360*58b9f456SAndroid Build Coastguard Worker __node() {} 1361*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1362*58b9f456SAndroid Build Coastguard Worker virtual ~__node() {} 1363*58b9f456SAndroid Build Coastguard Worker 1364*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1365*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const {} 1366*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1367*58b9f456SAndroid Build Coastguard Worker virtual void __exec_split(bool, __state&) const {} 1368*58b9f456SAndroid Build Coastguard Worker}; 1369*58b9f456SAndroid Build Coastguard Worker 1370*58b9f456SAndroid Build Coastguard Worker// __end_state 1371*58b9f456SAndroid Build Coastguard Worker 1372*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1373*58b9f456SAndroid Build Coastguard Workerclass __end_state 1374*58b9f456SAndroid Build Coastguard Worker : public __node<_CharT> 1375*58b9f456SAndroid Build Coastguard Worker{ 1376*58b9f456SAndroid Build Coastguard Workerpublic: 1377*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1378*58b9f456SAndroid Build Coastguard Worker 1379*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1380*58b9f456SAndroid Build Coastguard Worker __end_state() {} 1381*58b9f456SAndroid Build Coastguard Worker 1382*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1383*58b9f456SAndroid Build Coastguard Worker}; 1384*58b9f456SAndroid Build Coastguard Worker 1385*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1386*58b9f456SAndroid Build Coastguard Workervoid 1387*58b9f456SAndroid Build Coastguard Worker__end_state<_CharT>::__exec(__state& __s) const 1388*58b9f456SAndroid Build Coastguard Worker{ 1389*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__end_state; 1390*58b9f456SAndroid Build Coastguard Worker} 1391*58b9f456SAndroid Build Coastguard Worker 1392*58b9f456SAndroid Build Coastguard Worker// __has_one_state 1393*58b9f456SAndroid Build Coastguard Worker 1394*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1395*58b9f456SAndroid Build Coastguard Workerclass __has_one_state 1396*58b9f456SAndroid Build Coastguard Worker : public __node<_CharT> 1397*58b9f456SAndroid Build Coastguard Worker{ 1398*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* __first_; 1399*58b9f456SAndroid Build Coastguard Worker 1400*58b9f456SAndroid Build Coastguard Workerpublic: 1401*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1402*58b9f456SAndroid Build Coastguard Worker explicit __has_one_state(__node<_CharT>* __s) 1403*58b9f456SAndroid Build Coastguard Worker : __first_(__s) {} 1404*58b9f456SAndroid Build Coastguard Worker 1405*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1406*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* first() const {return __first_;} 1407*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1408*58b9f456SAndroid Build Coastguard Worker __node<_CharT>*& first() {return __first_;} 1409*58b9f456SAndroid Build Coastguard Worker}; 1410*58b9f456SAndroid Build Coastguard Worker 1411*58b9f456SAndroid Build Coastguard Worker// __owns_one_state 1412*58b9f456SAndroid Build Coastguard Worker 1413*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1414*58b9f456SAndroid Build Coastguard Workerclass __owns_one_state 1415*58b9f456SAndroid Build Coastguard Worker : public __has_one_state<_CharT> 1416*58b9f456SAndroid Build Coastguard Worker{ 1417*58b9f456SAndroid Build Coastguard Worker typedef __has_one_state<_CharT> base; 1418*58b9f456SAndroid Build Coastguard Worker 1419*58b9f456SAndroid Build Coastguard Workerpublic: 1420*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1421*58b9f456SAndroid Build Coastguard Worker explicit __owns_one_state(__node<_CharT>* __s) 1422*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 1423*58b9f456SAndroid Build Coastguard Worker 1424*58b9f456SAndroid Build Coastguard Worker virtual ~__owns_one_state(); 1425*58b9f456SAndroid Build Coastguard Worker}; 1426*58b9f456SAndroid Build Coastguard Worker 1427*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1428*58b9f456SAndroid Build Coastguard Worker__owns_one_state<_CharT>::~__owns_one_state() 1429*58b9f456SAndroid Build Coastguard Worker{ 1430*58b9f456SAndroid Build Coastguard Worker delete this->first(); 1431*58b9f456SAndroid Build Coastguard Worker} 1432*58b9f456SAndroid Build Coastguard Worker 1433*58b9f456SAndroid Build Coastguard Worker// __empty_state 1434*58b9f456SAndroid Build Coastguard Worker 1435*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1436*58b9f456SAndroid Build Coastguard Workerclass __empty_state 1437*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1438*58b9f456SAndroid Build Coastguard Worker{ 1439*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1440*58b9f456SAndroid Build Coastguard Worker 1441*58b9f456SAndroid Build Coastguard Workerpublic: 1442*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1443*58b9f456SAndroid Build Coastguard Worker 1444*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1445*58b9f456SAndroid Build Coastguard Worker explicit __empty_state(__node<_CharT>* __s) 1446*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 1447*58b9f456SAndroid Build Coastguard Worker 1448*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1449*58b9f456SAndroid Build Coastguard Worker}; 1450*58b9f456SAndroid Build Coastguard Worker 1451*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1452*58b9f456SAndroid Build Coastguard Workervoid 1453*58b9f456SAndroid Build Coastguard Worker__empty_state<_CharT>::__exec(__state& __s) const 1454*58b9f456SAndroid Build Coastguard Worker{ 1455*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1456*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1457*58b9f456SAndroid Build Coastguard Worker} 1458*58b9f456SAndroid Build Coastguard Worker 1459*58b9f456SAndroid Build Coastguard Worker// __empty_non_own_state 1460*58b9f456SAndroid Build Coastguard Worker 1461*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1462*58b9f456SAndroid Build Coastguard Workerclass __empty_non_own_state 1463*58b9f456SAndroid Build Coastguard Worker : public __has_one_state<_CharT> 1464*58b9f456SAndroid Build Coastguard Worker{ 1465*58b9f456SAndroid Build Coastguard Worker typedef __has_one_state<_CharT> base; 1466*58b9f456SAndroid Build Coastguard Worker 1467*58b9f456SAndroid Build Coastguard Workerpublic: 1468*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1469*58b9f456SAndroid Build Coastguard Worker 1470*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1471*58b9f456SAndroid Build Coastguard Worker explicit __empty_non_own_state(__node<_CharT>* __s) 1472*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 1473*58b9f456SAndroid Build Coastguard Worker 1474*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1475*58b9f456SAndroid Build Coastguard Worker}; 1476*58b9f456SAndroid Build Coastguard Worker 1477*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1478*58b9f456SAndroid Build Coastguard Workervoid 1479*58b9f456SAndroid Build Coastguard Worker__empty_non_own_state<_CharT>::__exec(__state& __s) const 1480*58b9f456SAndroid Build Coastguard Worker{ 1481*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1482*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1483*58b9f456SAndroid Build Coastguard Worker} 1484*58b9f456SAndroid Build Coastguard Worker 1485*58b9f456SAndroid Build Coastguard Worker// __repeat_one_loop 1486*58b9f456SAndroid Build Coastguard Worker 1487*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1488*58b9f456SAndroid Build Coastguard Workerclass __repeat_one_loop 1489*58b9f456SAndroid Build Coastguard Worker : public __has_one_state<_CharT> 1490*58b9f456SAndroid Build Coastguard Worker{ 1491*58b9f456SAndroid Build Coastguard Worker typedef __has_one_state<_CharT> base; 1492*58b9f456SAndroid Build Coastguard Worker 1493*58b9f456SAndroid Build Coastguard Workerpublic: 1494*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1495*58b9f456SAndroid Build Coastguard Worker 1496*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1497*58b9f456SAndroid Build Coastguard Worker explicit __repeat_one_loop(__node<_CharT>* __s) 1498*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 1499*58b9f456SAndroid Build Coastguard Worker 1500*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1501*58b9f456SAndroid Build Coastguard Worker}; 1502*58b9f456SAndroid Build Coastguard Worker 1503*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1504*58b9f456SAndroid Build Coastguard Workervoid 1505*58b9f456SAndroid Build Coastguard Worker__repeat_one_loop<_CharT>::__exec(__state& __s) const 1506*58b9f456SAndroid Build Coastguard Worker{ 1507*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__repeat; 1508*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1509*58b9f456SAndroid Build Coastguard Worker} 1510*58b9f456SAndroid Build Coastguard Worker 1511*58b9f456SAndroid Build Coastguard Worker// __owns_two_states 1512*58b9f456SAndroid Build Coastguard Worker 1513*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1514*58b9f456SAndroid Build Coastguard Workerclass __owns_two_states 1515*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1516*58b9f456SAndroid Build Coastguard Worker{ 1517*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1518*58b9f456SAndroid Build Coastguard Worker 1519*58b9f456SAndroid Build Coastguard Worker base* __second_; 1520*58b9f456SAndroid Build Coastguard Worker 1521*58b9f456SAndroid Build Coastguard Workerpublic: 1522*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1523*58b9f456SAndroid Build Coastguard Worker explicit __owns_two_states(__node<_CharT>* __s1, base* __s2) 1524*58b9f456SAndroid Build Coastguard Worker : base(__s1), __second_(__s2) {} 1525*58b9f456SAndroid Build Coastguard Worker 1526*58b9f456SAndroid Build Coastguard Worker virtual ~__owns_two_states(); 1527*58b9f456SAndroid Build Coastguard Worker 1528*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1529*58b9f456SAndroid Build Coastguard Worker base* second() const {return __second_;} 1530*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1531*58b9f456SAndroid Build Coastguard Worker base*& second() {return __second_;} 1532*58b9f456SAndroid Build Coastguard Worker}; 1533*58b9f456SAndroid Build Coastguard Worker 1534*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1535*58b9f456SAndroid Build Coastguard Worker__owns_two_states<_CharT>::~__owns_two_states() 1536*58b9f456SAndroid Build Coastguard Worker{ 1537*58b9f456SAndroid Build Coastguard Worker delete __second_; 1538*58b9f456SAndroid Build Coastguard Worker} 1539*58b9f456SAndroid Build Coastguard Worker 1540*58b9f456SAndroid Build Coastguard Worker// __loop 1541*58b9f456SAndroid Build Coastguard Worker 1542*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1543*58b9f456SAndroid Build Coastguard Workerclass __loop 1544*58b9f456SAndroid Build Coastguard Worker : public __owns_two_states<_CharT> 1545*58b9f456SAndroid Build Coastguard Worker{ 1546*58b9f456SAndroid Build Coastguard Worker typedef __owns_two_states<_CharT> base; 1547*58b9f456SAndroid Build Coastguard Worker 1548*58b9f456SAndroid Build Coastguard Worker size_t __min_; 1549*58b9f456SAndroid Build Coastguard Worker size_t __max_; 1550*58b9f456SAndroid Build Coastguard Worker unsigned __loop_id_; 1551*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin_; 1552*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_end_; 1553*58b9f456SAndroid Build Coastguard Worker bool __greedy_; 1554*58b9f456SAndroid Build Coastguard Worker 1555*58b9f456SAndroid Build Coastguard Workerpublic: 1556*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1557*58b9f456SAndroid Build Coastguard Worker 1558*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1559*58b9f456SAndroid Build Coastguard Worker explicit __loop(unsigned __loop_id, 1560*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* __s1, __owns_one_state<_CharT>* __s2, 1561*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin, unsigned __mexp_end, 1562*58b9f456SAndroid Build Coastguard Worker bool __greedy = true, 1563*58b9f456SAndroid Build Coastguard Worker size_t __min = 0, 1564*58b9f456SAndroid Build Coastguard Worker size_t __max = numeric_limits<size_t>::max()) 1565*58b9f456SAndroid Build Coastguard Worker : base(__s1, __s2), __min_(__min), __max_(__max), __loop_id_(__loop_id), 1566*58b9f456SAndroid Build Coastguard Worker __mexp_begin_(__mexp_begin), __mexp_end_(__mexp_end), 1567*58b9f456SAndroid Build Coastguard Worker __greedy_(__greedy) {} 1568*58b9f456SAndroid Build Coastguard Worker 1569*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state& __s) const; 1570*58b9f456SAndroid Build Coastguard Worker virtual void __exec_split(bool __second, __state& __s) const; 1571*58b9f456SAndroid Build Coastguard Worker 1572*58b9f456SAndroid Build Coastguard Workerprivate: 1573*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1574*58b9f456SAndroid Build Coastguard Worker void __init_repeat(__state& __s) const 1575*58b9f456SAndroid Build Coastguard Worker { 1576*58b9f456SAndroid Build Coastguard Worker __s.__loop_data_[__loop_id_].second = __s.__current_; 1577*58b9f456SAndroid Build Coastguard Worker for (size_t __i = __mexp_begin_-1; __i != __mexp_end_-1; ++__i) 1578*58b9f456SAndroid Build Coastguard Worker { 1579*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__i].first = __s.__last_; 1580*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__i].second = __s.__last_; 1581*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__i].matched = false; 1582*58b9f456SAndroid Build Coastguard Worker } 1583*58b9f456SAndroid Build Coastguard Worker } 1584*58b9f456SAndroid Build Coastguard Worker}; 1585*58b9f456SAndroid Build Coastguard Worker 1586*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1587*58b9f456SAndroid Build Coastguard Workervoid 1588*58b9f456SAndroid Build Coastguard Worker__loop<_CharT>::__exec(__state& __s) const 1589*58b9f456SAndroid Build Coastguard Worker{ 1590*58b9f456SAndroid Build Coastguard Worker if (__s.__do_ == __state::__repeat) 1591*58b9f456SAndroid Build Coastguard Worker { 1592*58b9f456SAndroid Build Coastguard Worker bool __do_repeat = ++__s.__loop_data_[__loop_id_].first < __max_; 1593*58b9f456SAndroid Build Coastguard Worker bool __do_alt = __s.__loop_data_[__loop_id_].first >= __min_; 1594*58b9f456SAndroid Build Coastguard Worker if (__do_repeat && __do_alt && 1595*58b9f456SAndroid Build Coastguard Worker __s.__loop_data_[__loop_id_].second == __s.__current_) 1596*58b9f456SAndroid Build Coastguard Worker __do_repeat = false; 1597*58b9f456SAndroid Build Coastguard Worker if (__do_repeat && __do_alt) 1598*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__split; 1599*58b9f456SAndroid Build Coastguard Worker else if (__do_repeat) 1600*58b9f456SAndroid Build Coastguard Worker { 1601*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1602*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1603*58b9f456SAndroid Build Coastguard Worker __init_repeat(__s); 1604*58b9f456SAndroid Build Coastguard Worker } 1605*58b9f456SAndroid Build Coastguard Worker else 1606*58b9f456SAndroid Build Coastguard Worker { 1607*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1608*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->second(); 1609*58b9f456SAndroid Build Coastguard Worker } 1610*58b9f456SAndroid Build Coastguard Worker } 1611*58b9f456SAndroid Build Coastguard Worker else 1612*58b9f456SAndroid Build Coastguard Worker { 1613*58b9f456SAndroid Build Coastguard Worker __s.__loop_data_[__loop_id_].first = 0; 1614*58b9f456SAndroid Build Coastguard Worker bool __do_repeat = 0 < __max_; 1615*58b9f456SAndroid Build Coastguard Worker bool __do_alt = 0 >= __min_; 1616*58b9f456SAndroid Build Coastguard Worker if (__do_repeat && __do_alt) 1617*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__split; 1618*58b9f456SAndroid Build Coastguard Worker else if (__do_repeat) 1619*58b9f456SAndroid Build Coastguard Worker { 1620*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1621*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1622*58b9f456SAndroid Build Coastguard Worker __init_repeat(__s); 1623*58b9f456SAndroid Build Coastguard Worker } 1624*58b9f456SAndroid Build Coastguard Worker else 1625*58b9f456SAndroid Build Coastguard Worker { 1626*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1627*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->second(); 1628*58b9f456SAndroid Build Coastguard Worker } 1629*58b9f456SAndroid Build Coastguard Worker } 1630*58b9f456SAndroid Build Coastguard Worker} 1631*58b9f456SAndroid Build Coastguard Worker 1632*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1633*58b9f456SAndroid Build Coastguard Workervoid 1634*58b9f456SAndroid Build Coastguard Worker__loop<_CharT>::__exec_split(bool __second, __state& __s) const 1635*58b9f456SAndroid Build Coastguard Worker{ 1636*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1637*58b9f456SAndroid Build Coastguard Worker if (__greedy_ != __second) 1638*58b9f456SAndroid Build Coastguard Worker { 1639*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1640*58b9f456SAndroid Build Coastguard Worker __init_repeat(__s); 1641*58b9f456SAndroid Build Coastguard Worker } 1642*58b9f456SAndroid Build Coastguard Worker else 1643*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->second(); 1644*58b9f456SAndroid Build Coastguard Worker} 1645*58b9f456SAndroid Build Coastguard Worker 1646*58b9f456SAndroid Build Coastguard Worker// __alternate 1647*58b9f456SAndroid Build Coastguard Worker 1648*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1649*58b9f456SAndroid Build Coastguard Workerclass __alternate 1650*58b9f456SAndroid Build Coastguard Worker : public __owns_two_states<_CharT> 1651*58b9f456SAndroid Build Coastguard Worker{ 1652*58b9f456SAndroid Build Coastguard Worker typedef __owns_two_states<_CharT> base; 1653*58b9f456SAndroid Build Coastguard Worker 1654*58b9f456SAndroid Build Coastguard Workerpublic: 1655*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1656*58b9f456SAndroid Build Coastguard Worker 1657*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1658*58b9f456SAndroid Build Coastguard Worker explicit __alternate(__owns_one_state<_CharT>* __s1, 1659*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s2) 1660*58b9f456SAndroid Build Coastguard Worker : base(__s1, __s2) {} 1661*58b9f456SAndroid Build Coastguard Worker 1662*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state& __s) const; 1663*58b9f456SAndroid Build Coastguard Worker virtual void __exec_split(bool __second, __state& __s) const; 1664*58b9f456SAndroid Build Coastguard Worker}; 1665*58b9f456SAndroid Build Coastguard Worker 1666*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1667*58b9f456SAndroid Build Coastguard Workervoid 1668*58b9f456SAndroid Build Coastguard Worker__alternate<_CharT>::__exec(__state& __s) const 1669*58b9f456SAndroid Build Coastguard Worker{ 1670*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__split; 1671*58b9f456SAndroid Build Coastguard Worker} 1672*58b9f456SAndroid Build Coastguard Worker 1673*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1674*58b9f456SAndroid Build Coastguard Workervoid 1675*58b9f456SAndroid Build Coastguard Worker__alternate<_CharT>::__exec_split(bool __second, __state& __s) const 1676*58b9f456SAndroid Build Coastguard Worker{ 1677*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1678*58b9f456SAndroid Build Coastguard Worker if (__second) 1679*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->second(); 1680*58b9f456SAndroid Build Coastguard Worker else 1681*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1682*58b9f456SAndroid Build Coastguard Worker} 1683*58b9f456SAndroid Build Coastguard Worker 1684*58b9f456SAndroid Build Coastguard Worker// __begin_marked_subexpression 1685*58b9f456SAndroid Build Coastguard Worker 1686*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1687*58b9f456SAndroid Build Coastguard Workerclass __begin_marked_subexpression 1688*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1689*58b9f456SAndroid Build Coastguard Worker{ 1690*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1691*58b9f456SAndroid Build Coastguard Worker 1692*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 1693*58b9f456SAndroid Build Coastguard Workerpublic: 1694*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1695*58b9f456SAndroid Build Coastguard Worker 1696*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1697*58b9f456SAndroid Build Coastguard Worker explicit __begin_marked_subexpression(unsigned __mexp, __node<_CharT>* __s) 1698*58b9f456SAndroid Build Coastguard Worker : base(__s), __mexp_(__mexp) {} 1699*58b9f456SAndroid Build Coastguard Worker 1700*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1701*58b9f456SAndroid Build Coastguard Worker}; 1702*58b9f456SAndroid Build Coastguard Worker 1703*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1704*58b9f456SAndroid Build Coastguard Workervoid 1705*58b9f456SAndroid Build Coastguard Worker__begin_marked_subexpression<_CharT>::__exec(__state& __s) const 1706*58b9f456SAndroid Build Coastguard Worker{ 1707*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1708*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__mexp_-1].first = __s.__current_; 1709*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1710*58b9f456SAndroid Build Coastguard Worker} 1711*58b9f456SAndroid Build Coastguard Worker 1712*58b9f456SAndroid Build Coastguard Worker// __end_marked_subexpression 1713*58b9f456SAndroid Build Coastguard Worker 1714*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1715*58b9f456SAndroid Build Coastguard Workerclass __end_marked_subexpression 1716*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1717*58b9f456SAndroid Build Coastguard Worker{ 1718*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1719*58b9f456SAndroid Build Coastguard Worker 1720*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 1721*58b9f456SAndroid Build Coastguard Workerpublic: 1722*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1723*58b9f456SAndroid Build Coastguard Worker 1724*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1725*58b9f456SAndroid Build Coastguard Worker explicit __end_marked_subexpression(unsigned __mexp, __node<_CharT>* __s) 1726*58b9f456SAndroid Build Coastguard Worker : base(__s), __mexp_(__mexp) {} 1727*58b9f456SAndroid Build Coastguard Worker 1728*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1729*58b9f456SAndroid Build Coastguard Worker}; 1730*58b9f456SAndroid Build Coastguard Worker 1731*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1732*58b9f456SAndroid Build Coastguard Workervoid 1733*58b9f456SAndroid Build Coastguard Worker__end_marked_subexpression<_CharT>::__exec(__state& __s) const 1734*58b9f456SAndroid Build Coastguard Worker{ 1735*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1736*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__mexp_-1].second = __s.__current_; 1737*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__mexp_-1].matched = true; 1738*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1739*58b9f456SAndroid Build Coastguard Worker} 1740*58b9f456SAndroid Build Coastguard Worker 1741*58b9f456SAndroid Build Coastguard Worker// __back_ref 1742*58b9f456SAndroid Build Coastguard Worker 1743*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1744*58b9f456SAndroid Build Coastguard Workerclass __back_ref 1745*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1746*58b9f456SAndroid Build Coastguard Worker{ 1747*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1748*58b9f456SAndroid Build Coastguard Worker 1749*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 1750*58b9f456SAndroid Build Coastguard Workerpublic: 1751*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1752*58b9f456SAndroid Build Coastguard Worker 1753*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1754*58b9f456SAndroid Build Coastguard Worker explicit __back_ref(unsigned __mexp, __node<_CharT>* __s) 1755*58b9f456SAndroid Build Coastguard Worker : base(__s), __mexp_(__mexp) {} 1756*58b9f456SAndroid Build Coastguard Worker 1757*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1758*58b9f456SAndroid Build Coastguard Worker}; 1759*58b9f456SAndroid Build Coastguard Worker 1760*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1761*58b9f456SAndroid Build Coastguard Workervoid 1762*58b9f456SAndroid Build Coastguard Worker__back_ref<_CharT>::__exec(__state& __s) const 1763*58b9f456SAndroid Build Coastguard Worker{ 1764*58b9f456SAndroid Build Coastguard Worker if (__mexp_ > __s.__sub_matches_.size()) 1765*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_backref>(); 1766*58b9f456SAndroid Build Coastguard Worker sub_match<const _CharT*>& __sm = __s.__sub_matches_[__mexp_-1]; 1767*58b9f456SAndroid Build Coastguard Worker if (__sm.matched) 1768*58b9f456SAndroid Build Coastguard Worker { 1769*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __len = __sm.second - __sm.first; 1770*58b9f456SAndroid Build Coastguard Worker if (__s.__last_ - __s.__current_ >= __len && 1771*58b9f456SAndroid Build Coastguard Worker _VSTD::equal(__sm.first, __sm.second, __s.__current_)) 1772*58b9f456SAndroid Build Coastguard Worker { 1773*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1774*58b9f456SAndroid Build Coastguard Worker __s.__current_ += __len; 1775*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1776*58b9f456SAndroid Build Coastguard Worker } 1777*58b9f456SAndroid Build Coastguard Worker else 1778*58b9f456SAndroid Build Coastguard Worker { 1779*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1780*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1781*58b9f456SAndroid Build Coastguard Worker } 1782*58b9f456SAndroid Build Coastguard Worker } 1783*58b9f456SAndroid Build Coastguard Worker else 1784*58b9f456SAndroid Build Coastguard Worker { 1785*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1786*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1787*58b9f456SAndroid Build Coastguard Worker } 1788*58b9f456SAndroid Build Coastguard Worker} 1789*58b9f456SAndroid Build Coastguard Worker 1790*58b9f456SAndroid Build Coastguard Worker// __back_ref_icase 1791*58b9f456SAndroid Build Coastguard Worker 1792*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1793*58b9f456SAndroid Build Coastguard Workerclass __back_ref_icase 1794*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1795*58b9f456SAndroid Build Coastguard Worker{ 1796*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1797*58b9f456SAndroid Build Coastguard Worker 1798*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 1799*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 1800*58b9f456SAndroid Build Coastguard Workerpublic: 1801*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1802*58b9f456SAndroid Build Coastguard Worker 1803*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1804*58b9f456SAndroid Build Coastguard Worker explicit __back_ref_icase(const _Traits& __traits, unsigned __mexp, 1805*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* __s) 1806*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __mexp_(__mexp) {} 1807*58b9f456SAndroid Build Coastguard Worker 1808*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1809*58b9f456SAndroid Build Coastguard Worker}; 1810*58b9f456SAndroid Build Coastguard Worker 1811*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1812*58b9f456SAndroid Build Coastguard Workervoid 1813*58b9f456SAndroid Build Coastguard Worker__back_ref_icase<_CharT, _Traits>::__exec(__state& __s) const 1814*58b9f456SAndroid Build Coastguard Worker{ 1815*58b9f456SAndroid Build Coastguard Worker sub_match<const _CharT*>& __sm = __s.__sub_matches_[__mexp_-1]; 1816*58b9f456SAndroid Build Coastguard Worker if (__sm.matched) 1817*58b9f456SAndroid Build Coastguard Worker { 1818*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __len = __sm.second - __sm.first; 1819*58b9f456SAndroid Build Coastguard Worker if (__s.__last_ - __s.__current_ >= __len) 1820*58b9f456SAndroid Build Coastguard Worker { 1821*58b9f456SAndroid Build Coastguard Worker for (ptrdiff_t __i = 0; __i < __len; ++__i) 1822*58b9f456SAndroid Build Coastguard Worker { 1823*58b9f456SAndroid Build Coastguard Worker if (__traits_.translate_nocase(__sm.first[__i]) != 1824*58b9f456SAndroid Build Coastguard Worker __traits_.translate_nocase(__s.__current_[__i])) 1825*58b9f456SAndroid Build Coastguard Worker goto __not_equal; 1826*58b9f456SAndroid Build Coastguard Worker } 1827*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1828*58b9f456SAndroid Build Coastguard Worker __s.__current_ += __len; 1829*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1830*58b9f456SAndroid Build Coastguard Worker } 1831*58b9f456SAndroid Build Coastguard Worker else 1832*58b9f456SAndroid Build Coastguard Worker { 1833*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1834*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1835*58b9f456SAndroid Build Coastguard Worker } 1836*58b9f456SAndroid Build Coastguard Worker } 1837*58b9f456SAndroid Build Coastguard Worker else 1838*58b9f456SAndroid Build Coastguard Worker { 1839*58b9f456SAndroid Build Coastguard Worker__not_equal: 1840*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1841*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1842*58b9f456SAndroid Build Coastguard Worker } 1843*58b9f456SAndroid Build Coastguard Worker} 1844*58b9f456SAndroid Build Coastguard Worker 1845*58b9f456SAndroid Build Coastguard Worker// __back_ref_collate 1846*58b9f456SAndroid Build Coastguard Worker 1847*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1848*58b9f456SAndroid Build Coastguard Workerclass __back_ref_collate 1849*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1850*58b9f456SAndroid Build Coastguard Worker{ 1851*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1852*58b9f456SAndroid Build Coastguard Worker 1853*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 1854*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 1855*58b9f456SAndroid Build Coastguard Workerpublic: 1856*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1857*58b9f456SAndroid Build Coastguard Worker 1858*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1859*58b9f456SAndroid Build Coastguard Worker explicit __back_ref_collate(const _Traits& __traits, unsigned __mexp, 1860*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* __s) 1861*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __mexp_(__mexp) {} 1862*58b9f456SAndroid Build Coastguard Worker 1863*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1864*58b9f456SAndroid Build Coastguard Worker}; 1865*58b9f456SAndroid Build Coastguard Worker 1866*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1867*58b9f456SAndroid Build Coastguard Workervoid 1868*58b9f456SAndroid Build Coastguard Worker__back_ref_collate<_CharT, _Traits>::__exec(__state& __s) const 1869*58b9f456SAndroid Build Coastguard Worker{ 1870*58b9f456SAndroid Build Coastguard Worker sub_match<const _CharT*>& __sm = __s.__sub_matches_[__mexp_-1]; 1871*58b9f456SAndroid Build Coastguard Worker if (__sm.matched) 1872*58b9f456SAndroid Build Coastguard Worker { 1873*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __len = __sm.second - __sm.first; 1874*58b9f456SAndroid Build Coastguard Worker if (__s.__last_ - __s.__current_ >= __len) 1875*58b9f456SAndroid Build Coastguard Worker { 1876*58b9f456SAndroid Build Coastguard Worker for (ptrdiff_t __i = 0; __i < __len; ++__i) 1877*58b9f456SAndroid Build Coastguard Worker { 1878*58b9f456SAndroid Build Coastguard Worker if (__traits_.translate(__sm.first[__i]) != 1879*58b9f456SAndroid Build Coastguard Worker __traits_.translate(__s.__current_[__i])) 1880*58b9f456SAndroid Build Coastguard Worker goto __not_equal; 1881*58b9f456SAndroid Build Coastguard Worker } 1882*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1883*58b9f456SAndroid Build Coastguard Worker __s.__current_ += __len; 1884*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1885*58b9f456SAndroid Build Coastguard Worker } 1886*58b9f456SAndroid Build Coastguard Worker else 1887*58b9f456SAndroid Build Coastguard Worker { 1888*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1889*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1890*58b9f456SAndroid Build Coastguard Worker } 1891*58b9f456SAndroid Build Coastguard Worker } 1892*58b9f456SAndroid Build Coastguard Worker else 1893*58b9f456SAndroid Build Coastguard Worker { 1894*58b9f456SAndroid Build Coastguard Worker__not_equal: 1895*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1896*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1897*58b9f456SAndroid Build Coastguard Worker } 1898*58b9f456SAndroid Build Coastguard Worker} 1899*58b9f456SAndroid Build Coastguard Worker 1900*58b9f456SAndroid Build Coastguard Worker// __word_boundary 1901*58b9f456SAndroid Build Coastguard Worker 1902*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1903*58b9f456SAndroid Build Coastguard Workerclass __word_boundary 1904*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1905*58b9f456SAndroid Build Coastguard Worker{ 1906*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1907*58b9f456SAndroid Build Coastguard Worker 1908*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 1909*58b9f456SAndroid Build Coastguard Worker bool __invert_; 1910*58b9f456SAndroid Build Coastguard Workerpublic: 1911*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1912*58b9f456SAndroid Build Coastguard Worker 1913*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1914*58b9f456SAndroid Build Coastguard Worker explicit __word_boundary(const _Traits& __traits, bool __invert, 1915*58b9f456SAndroid Build Coastguard Worker __node<_CharT>* __s) 1916*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __invert_(__invert) {} 1917*58b9f456SAndroid Build Coastguard Worker 1918*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1919*58b9f456SAndroid Build Coastguard Worker}; 1920*58b9f456SAndroid Build Coastguard Worker 1921*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 1922*58b9f456SAndroid Build Coastguard Workervoid 1923*58b9f456SAndroid Build Coastguard Worker__word_boundary<_CharT, _Traits>::__exec(__state& __s) const 1924*58b9f456SAndroid Build Coastguard Worker{ 1925*58b9f456SAndroid Build Coastguard Worker bool __is_word_b = false; 1926*58b9f456SAndroid Build Coastguard Worker if (__s.__first_ != __s.__last_) 1927*58b9f456SAndroid Build Coastguard Worker { 1928*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ == __s.__last_) 1929*58b9f456SAndroid Build Coastguard Worker { 1930*58b9f456SAndroid Build Coastguard Worker if (!(__s.__flags_ & regex_constants::match_not_eow)) 1931*58b9f456SAndroid Build Coastguard Worker { 1932*58b9f456SAndroid Build Coastguard Worker _CharT __c = __s.__current_[-1]; 1933*58b9f456SAndroid Build Coastguard Worker __is_word_b = __c == '_' || 1934*58b9f456SAndroid Build Coastguard Worker __traits_.isctype(__c, ctype_base::alnum); 1935*58b9f456SAndroid Build Coastguard Worker } 1936*58b9f456SAndroid Build Coastguard Worker } 1937*58b9f456SAndroid Build Coastguard Worker else if (__s.__current_ == __s.__first_ && 1938*58b9f456SAndroid Build Coastguard Worker !(__s.__flags_ & regex_constants::match_prev_avail)) 1939*58b9f456SAndroid Build Coastguard Worker { 1940*58b9f456SAndroid Build Coastguard Worker if (!(__s.__flags_ & regex_constants::match_not_bow)) 1941*58b9f456SAndroid Build Coastguard Worker { 1942*58b9f456SAndroid Build Coastguard Worker _CharT __c = *__s.__current_; 1943*58b9f456SAndroid Build Coastguard Worker __is_word_b = __c == '_' || 1944*58b9f456SAndroid Build Coastguard Worker __traits_.isctype(__c, ctype_base::alnum); 1945*58b9f456SAndroid Build Coastguard Worker } 1946*58b9f456SAndroid Build Coastguard Worker } 1947*58b9f456SAndroid Build Coastguard Worker else 1948*58b9f456SAndroid Build Coastguard Worker { 1949*58b9f456SAndroid Build Coastguard Worker _CharT __c1 = __s.__current_[-1]; 1950*58b9f456SAndroid Build Coastguard Worker _CharT __c2 = *__s.__current_; 1951*58b9f456SAndroid Build Coastguard Worker bool __is_c1_b = __c1 == '_' || 1952*58b9f456SAndroid Build Coastguard Worker __traits_.isctype(__c1, ctype_base::alnum); 1953*58b9f456SAndroid Build Coastguard Worker bool __is_c2_b = __c2 == '_' || 1954*58b9f456SAndroid Build Coastguard Worker __traits_.isctype(__c2, ctype_base::alnum); 1955*58b9f456SAndroid Build Coastguard Worker __is_word_b = __is_c1_b != __is_c2_b; 1956*58b9f456SAndroid Build Coastguard Worker } 1957*58b9f456SAndroid Build Coastguard Worker } 1958*58b9f456SAndroid Build Coastguard Worker if (__is_word_b != __invert_) 1959*58b9f456SAndroid Build Coastguard Worker { 1960*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1961*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1962*58b9f456SAndroid Build Coastguard Worker } 1963*58b9f456SAndroid Build Coastguard Worker else 1964*58b9f456SAndroid Build Coastguard Worker { 1965*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 1966*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 1967*58b9f456SAndroid Build Coastguard Worker } 1968*58b9f456SAndroid Build Coastguard Worker} 1969*58b9f456SAndroid Build Coastguard Worker 1970*58b9f456SAndroid Build Coastguard Worker// __l_anchor 1971*58b9f456SAndroid Build Coastguard Worker 1972*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1973*58b9f456SAndroid Build Coastguard Workerclass __l_anchor 1974*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 1975*58b9f456SAndroid Build Coastguard Worker{ 1976*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 1977*58b9f456SAndroid Build Coastguard Worker 1978*58b9f456SAndroid Build Coastguard Workerpublic: 1979*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 1980*58b9f456SAndroid Build Coastguard Worker 1981*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1982*58b9f456SAndroid Build Coastguard Worker __l_anchor(__node<_CharT>* __s) 1983*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 1984*58b9f456SAndroid Build Coastguard Worker 1985*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 1986*58b9f456SAndroid Build Coastguard Worker}; 1987*58b9f456SAndroid Build Coastguard Worker 1988*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 1989*58b9f456SAndroid Build Coastguard Workervoid 1990*58b9f456SAndroid Build Coastguard Worker__l_anchor<_CharT>::__exec(__state& __s) const 1991*58b9f456SAndroid Build Coastguard Worker{ 1992*58b9f456SAndroid Build Coastguard Worker if (__s.__at_first_ && __s.__current_ == __s.__first_ && 1993*58b9f456SAndroid Build Coastguard Worker !(__s.__flags_ & regex_constants::match_not_bol)) 1994*58b9f456SAndroid Build Coastguard Worker { 1995*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 1996*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 1997*58b9f456SAndroid Build Coastguard Worker } 1998*58b9f456SAndroid Build Coastguard Worker else 1999*58b9f456SAndroid Build Coastguard Worker { 2000*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2001*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2002*58b9f456SAndroid Build Coastguard Worker } 2003*58b9f456SAndroid Build Coastguard Worker} 2004*58b9f456SAndroid Build Coastguard Worker 2005*58b9f456SAndroid Build Coastguard Worker// __r_anchor 2006*58b9f456SAndroid Build Coastguard Worker 2007*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2008*58b9f456SAndroid Build Coastguard Workerclass __r_anchor 2009*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2010*58b9f456SAndroid Build Coastguard Worker{ 2011*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2012*58b9f456SAndroid Build Coastguard Worker 2013*58b9f456SAndroid Build Coastguard Workerpublic: 2014*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2015*58b9f456SAndroid Build Coastguard Worker 2016*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2017*58b9f456SAndroid Build Coastguard Worker __r_anchor(__node<_CharT>* __s) 2018*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 2019*58b9f456SAndroid Build Coastguard Worker 2020*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2021*58b9f456SAndroid Build Coastguard Worker}; 2022*58b9f456SAndroid Build Coastguard Worker 2023*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2024*58b9f456SAndroid Build Coastguard Workervoid 2025*58b9f456SAndroid Build Coastguard Worker__r_anchor<_CharT>::__exec(__state& __s) const 2026*58b9f456SAndroid Build Coastguard Worker{ 2027*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ == __s.__last_ && 2028*58b9f456SAndroid Build Coastguard Worker !(__s.__flags_ & regex_constants::match_not_eol)) 2029*58b9f456SAndroid Build Coastguard Worker { 2030*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 2031*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2032*58b9f456SAndroid Build Coastguard Worker } 2033*58b9f456SAndroid Build Coastguard Worker else 2034*58b9f456SAndroid Build Coastguard Worker { 2035*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2036*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2037*58b9f456SAndroid Build Coastguard Worker } 2038*58b9f456SAndroid Build Coastguard Worker} 2039*58b9f456SAndroid Build Coastguard Worker 2040*58b9f456SAndroid Build Coastguard Worker// __match_any 2041*58b9f456SAndroid Build Coastguard Worker 2042*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2043*58b9f456SAndroid Build Coastguard Workerclass __match_any 2044*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2045*58b9f456SAndroid Build Coastguard Worker{ 2046*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2047*58b9f456SAndroid Build Coastguard Worker 2048*58b9f456SAndroid Build Coastguard Workerpublic: 2049*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2050*58b9f456SAndroid Build Coastguard Worker 2051*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2052*58b9f456SAndroid Build Coastguard Worker __match_any(__node<_CharT>* __s) 2053*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 2054*58b9f456SAndroid Build Coastguard Worker 2055*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2056*58b9f456SAndroid Build Coastguard Worker}; 2057*58b9f456SAndroid Build Coastguard Worker 2058*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2059*58b9f456SAndroid Build Coastguard Workervoid 2060*58b9f456SAndroid Build Coastguard Worker__match_any<_CharT>::__exec(__state& __s) const 2061*58b9f456SAndroid Build Coastguard Worker{ 2062*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ != __s.__last_ && *__s.__current_ != 0) 2063*58b9f456SAndroid Build Coastguard Worker { 2064*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_and_consume; 2065*58b9f456SAndroid Build Coastguard Worker ++__s.__current_; 2066*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2067*58b9f456SAndroid Build Coastguard Worker } 2068*58b9f456SAndroid Build Coastguard Worker else 2069*58b9f456SAndroid Build Coastguard Worker { 2070*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2071*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2072*58b9f456SAndroid Build Coastguard Worker } 2073*58b9f456SAndroid Build Coastguard Worker} 2074*58b9f456SAndroid Build Coastguard Worker 2075*58b9f456SAndroid Build Coastguard Worker// __match_any_but_newline 2076*58b9f456SAndroid Build Coastguard Worker 2077*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2078*58b9f456SAndroid Build Coastguard Workerclass __match_any_but_newline 2079*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2080*58b9f456SAndroid Build Coastguard Worker{ 2081*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2082*58b9f456SAndroid Build Coastguard Worker 2083*58b9f456SAndroid Build Coastguard Workerpublic: 2084*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2085*58b9f456SAndroid Build Coastguard Worker 2086*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2087*58b9f456SAndroid Build Coastguard Worker __match_any_but_newline(__node<_CharT>* __s) 2088*58b9f456SAndroid Build Coastguard Worker : base(__s) {} 2089*58b9f456SAndroid Build Coastguard Worker 2090*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2091*58b9f456SAndroid Build Coastguard Worker}; 2092*58b9f456SAndroid Build Coastguard Worker 2093*58b9f456SAndroid Build Coastguard Workertemplate <> _LIBCPP_FUNC_VIS void __match_any_but_newline<char>::__exec(__state&) const; 2094*58b9f456SAndroid Build Coastguard Workertemplate <> _LIBCPP_FUNC_VIS void __match_any_but_newline<wchar_t>::__exec(__state&) const; 2095*58b9f456SAndroid Build Coastguard Worker 2096*58b9f456SAndroid Build Coastguard Worker// __match_char 2097*58b9f456SAndroid Build Coastguard Worker 2098*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2099*58b9f456SAndroid Build Coastguard Workerclass __match_char 2100*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2101*58b9f456SAndroid Build Coastguard Worker{ 2102*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2103*58b9f456SAndroid Build Coastguard Worker 2104*58b9f456SAndroid Build Coastguard Worker _CharT __c_; 2105*58b9f456SAndroid Build Coastguard Worker 2106*58b9f456SAndroid Build Coastguard Worker __match_char(const __match_char&); 2107*58b9f456SAndroid Build Coastguard Worker __match_char& operator=(const __match_char&); 2108*58b9f456SAndroid Build Coastguard Workerpublic: 2109*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2110*58b9f456SAndroid Build Coastguard Worker 2111*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2112*58b9f456SAndroid Build Coastguard Worker __match_char(_CharT __c, __node<_CharT>* __s) 2113*58b9f456SAndroid Build Coastguard Worker : base(__s), __c_(__c) {} 2114*58b9f456SAndroid Build Coastguard Worker 2115*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2116*58b9f456SAndroid Build Coastguard Worker}; 2117*58b9f456SAndroid Build Coastguard Worker 2118*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT> 2119*58b9f456SAndroid Build Coastguard Workervoid 2120*58b9f456SAndroid Build Coastguard Worker__match_char<_CharT>::__exec(__state& __s) const 2121*58b9f456SAndroid Build Coastguard Worker{ 2122*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ != __s.__last_ && *__s.__current_ == __c_) 2123*58b9f456SAndroid Build Coastguard Worker { 2124*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_and_consume; 2125*58b9f456SAndroid Build Coastguard Worker ++__s.__current_; 2126*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2127*58b9f456SAndroid Build Coastguard Worker } 2128*58b9f456SAndroid Build Coastguard Worker else 2129*58b9f456SAndroid Build Coastguard Worker { 2130*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2131*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2132*58b9f456SAndroid Build Coastguard Worker } 2133*58b9f456SAndroid Build Coastguard Worker} 2134*58b9f456SAndroid Build Coastguard Worker 2135*58b9f456SAndroid Build Coastguard Worker// __match_char_icase 2136*58b9f456SAndroid Build Coastguard Worker 2137*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2138*58b9f456SAndroid Build Coastguard Workerclass __match_char_icase 2139*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2140*58b9f456SAndroid Build Coastguard Worker{ 2141*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2142*58b9f456SAndroid Build Coastguard Worker 2143*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 2144*58b9f456SAndroid Build Coastguard Worker _CharT __c_; 2145*58b9f456SAndroid Build Coastguard Worker 2146*58b9f456SAndroid Build Coastguard Worker __match_char_icase(const __match_char_icase&); 2147*58b9f456SAndroid Build Coastguard Worker __match_char_icase& operator=(const __match_char_icase&); 2148*58b9f456SAndroid Build Coastguard Workerpublic: 2149*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2150*58b9f456SAndroid Build Coastguard Worker 2151*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2152*58b9f456SAndroid Build Coastguard Worker __match_char_icase(const _Traits& __traits, _CharT __c, __node<_CharT>* __s) 2153*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __c_(__traits.translate_nocase(__c)) {} 2154*58b9f456SAndroid Build Coastguard Worker 2155*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2156*58b9f456SAndroid Build Coastguard Worker}; 2157*58b9f456SAndroid Build Coastguard Worker 2158*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2159*58b9f456SAndroid Build Coastguard Workervoid 2160*58b9f456SAndroid Build Coastguard Worker__match_char_icase<_CharT, _Traits>::__exec(__state& __s) const 2161*58b9f456SAndroid Build Coastguard Worker{ 2162*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ != __s.__last_ && 2163*58b9f456SAndroid Build Coastguard Worker __traits_.translate_nocase(*__s.__current_) == __c_) 2164*58b9f456SAndroid Build Coastguard Worker { 2165*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_and_consume; 2166*58b9f456SAndroid Build Coastguard Worker ++__s.__current_; 2167*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2168*58b9f456SAndroid Build Coastguard Worker } 2169*58b9f456SAndroid Build Coastguard Worker else 2170*58b9f456SAndroid Build Coastguard Worker { 2171*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2172*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2173*58b9f456SAndroid Build Coastguard Worker } 2174*58b9f456SAndroid Build Coastguard Worker} 2175*58b9f456SAndroid Build Coastguard Worker 2176*58b9f456SAndroid Build Coastguard Worker// __match_char_collate 2177*58b9f456SAndroid Build Coastguard Worker 2178*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2179*58b9f456SAndroid Build Coastguard Workerclass __match_char_collate 2180*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2181*58b9f456SAndroid Build Coastguard Worker{ 2182*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2183*58b9f456SAndroid Build Coastguard Worker 2184*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 2185*58b9f456SAndroid Build Coastguard Worker _CharT __c_; 2186*58b9f456SAndroid Build Coastguard Worker 2187*58b9f456SAndroid Build Coastguard Worker __match_char_collate(const __match_char_collate&); 2188*58b9f456SAndroid Build Coastguard Worker __match_char_collate& operator=(const __match_char_collate&); 2189*58b9f456SAndroid Build Coastguard Workerpublic: 2190*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2191*58b9f456SAndroid Build Coastguard Worker 2192*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2193*58b9f456SAndroid Build Coastguard Worker __match_char_collate(const _Traits& __traits, _CharT __c, __node<_CharT>* __s) 2194*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __c_(__traits.translate(__c)) {} 2195*58b9f456SAndroid Build Coastguard Worker 2196*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2197*58b9f456SAndroid Build Coastguard Worker}; 2198*58b9f456SAndroid Build Coastguard Worker 2199*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2200*58b9f456SAndroid Build Coastguard Workervoid 2201*58b9f456SAndroid Build Coastguard Worker__match_char_collate<_CharT, _Traits>::__exec(__state& __s) const 2202*58b9f456SAndroid Build Coastguard Worker{ 2203*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ != __s.__last_ && 2204*58b9f456SAndroid Build Coastguard Worker __traits_.translate(*__s.__current_) == __c_) 2205*58b9f456SAndroid Build Coastguard Worker { 2206*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_and_consume; 2207*58b9f456SAndroid Build Coastguard Worker ++__s.__current_; 2208*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2209*58b9f456SAndroid Build Coastguard Worker } 2210*58b9f456SAndroid Build Coastguard Worker else 2211*58b9f456SAndroid Build Coastguard Worker { 2212*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2213*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2214*58b9f456SAndroid Build Coastguard Worker } 2215*58b9f456SAndroid Build Coastguard Worker} 2216*58b9f456SAndroid Build Coastguard Worker 2217*58b9f456SAndroid Build Coastguard Worker// __bracket_expression 2218*58b9f456SAndroid Build Coastguard Worker 2219*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2220*58b9f456SAndroid Build Coastguard Workerclass __bracket_expression 2221*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2222*58b9f456SAndroid Build Coastguard Worker{ 2223*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2224*58b9f456SAndroid Build Coastguard Worker typedef typename _Traits::string_type string_type; 2225*58b9f456SAndroid Build Coastguard Worker 2226*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 2227*58b9f456SAndroid Build Coastguard Worker vector<_CharT> __chars_; 2228*58b9f456SAndroid Build Coastguard Worker vector<_CharT> __neg_chars_; 2229*58b9f456SAndroid Build Coastguard Worker vector<pair<string_type, string_type> > __ranges_; 2230*58b9f456SAndroid Build Coastguard Worker vector<pair<_CharT, _CharT> > __digraphs_; 2231*58b9f456SAndroid Build Coastguard Worker vector<string_type> __equivalences_; 2232*58b9f456SAndroid Build Coastguard Worker typename regex_traits<_CharT>::char_class_type __mask_; 2233*58b9f456SAndroid Build Coastguard Worker typename regex_traits<_CharT>::char_class_type __neg_mask_; 2234*58b9f456SAndroid Build Coastguard Worker bool __negate_; 2235*58b9f456SAndroid Build Coastguard Worker bool __icase_; 2236*58b9f456SAndroid Build Coastguard Worker bool __collate_; 2237*58b9f456SAndroid Build Coastguard Worker bool __might_have_digraph_; 2238*58b9f456SAndroid Build Coastguard Worker 2239*58b9f456SAndroid Build Coastguard Worker __bracket_expression(const __bracket_expression&); 2240*58b9f456SAndroid Build Coastguard Worker __bracket_expression& operator=(const __bracket_expression&); 2241*58b9f456SAndroid Build Coastguard Workerpublic: 2242*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2243*58b9f456SAndroid Build Coastguard Worker 2244*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2245*58b9f456SAndroid Build Coastguard Worker __bracket_expression(const _Traits& __traits, __node<_CharT>* __s, 2246*58b9f456SAndroid Build Coastguard Worker bool __negate, bool __icase, bool __collate) 2247*58b9f456SAndroid Build Coastguard Worker : base(__s), __traits_(__traits), __mask_(), __neg_mask_(), 2248*58b9f456SAndroid Build Coastguard Worker __negate_(__negate), __icase_(__icase), __collate_(__collate), 2249*58b9f456SAndroid Build Coastguard Worker __might_have_digraph_(__traits_.getloc().name() != "C") {} 2250*58b9f456SAndroid Build Coastguard Worker 2251*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 2252*58b9f456SAndroid Build Coastguard Worker 2253*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2254*58b9f456SAndroid Build Coastguard Worker bool __negated() const {return __negate_;} 2255*58b9f456SAndroid Build Coastguard Worker 2256*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2257*58b9f456SAndroid Build Coastguard Worker void __add_char(_CharT __c) 2258*58b9f456SAndroid Build Coastguard Worker { 2259*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2260*58b9f456SAndroid Build Coastguard Worker __chars_.push_back(__traits_.translate_nocase(__c)); 2261*58b9f456SAndroid Build Coastguard Worker else if (__collate_) 2262*58b9f456SAndroid Build Coastguard Worker __chars_.push_back(__traits_.translate(__c)); 2263*58b9f456SAndroid Build Coastguard Worker else 2264*58b9f456SAndroid Build Coastguard Worker __chars_.push_back(__c); 2265*58b9f456SAndroid Build Coastguard Worker } 2266*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2267*58b9f456SAndroid Build Coastguard Worker void __add_neg_char(_CharT __c) 2268*58b9f456SAndroid Build Coastguard Worker { 2269*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2270*58b9f456SAndroid Build Coastguard Worker __neg_chars_.push_back(__traits_.translate_nocase(__c)); 2271*58b9f456SAndroid Build Coastguard Worker else if (__collate_) 2272*58b9f456SAndroid Build Coastguard Worker __neg_chars_.push_back(__traits_.translate(__c)); 2273*58b9f456SAndroid Build Coastguard Worker else 2274*58b9f456SAndroid Build Coastguard Worker __neg_chars_.push_back(__c); 2275*58b9f456SAndroid Build Coastguard Worker } 2276*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2277*58b9f456SAndroid Build Coastguard Worker void __add_range(string_type __b, string_type __e) 2278*58b9f456SAndroid Build Coastguard Worker { 2279*58b9f456SAndroid Build Coastguard Worker if (__collate_) 2280*58b9f456SAndroid Build Coastguard Worker { 2281*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2282*58b9f456SAndroid Build Coastguard Worker { 2283*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __b.size(); ++__i) 2284*58b9f456SAndroid Build Coastguard Worker __b[__i] = __traits_.translate_nocase(__b[__i]); 2285*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __e.size(); ++__i) 2286*58b9f456SAndroid Build Coastguard Worker __e[__i] = __traits_.translate_nocase(__e[__i]); 2287*58b9f456SAndroid Build Coastguard Worker } 2288*58b9f456SAndroid Build Coastguard Worker else 2289*58b9f456SAndroid Build Coastguard Worker { 2290*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __b.size(); ++__i) 2291*58b9f456SAndroid Build Coastguard Worker __b[__i] = __traits_.translate(__b[__i]); 2292*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __e.size(); ++__i) 2293*58b9f456SAndroid Build Coastguard Worker __e[__i] = __traits_.translate(__e[__i]); 2294*58b9f456SAndroid Build Coastguard Worker } 2295*58b9f456SAndroid Build Coastguard Worker __ranges_.push_back(make_pair( 2296*58b9f456SAndroid Build Coastguard Worker __traits_.transform(__b.begin(), __b.end()), 2297*58b9f456SAndroid Build Coastguard Worker __traits_.transform(__e.begin(), __e.end()))); 2298*58b9f456SAndroid Build Coastguard Worker } 2299*58b9f456SAndroid Build Coastguard Worker else 2300*58b9f456SAndroid Build Coastguard Worker { 2301*58b9f456SAndroid Build Coastguard Worker if (__b.size() != 1 || __e.size() != 1) 2302*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_collate>(); 2303*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2304*58b9f456SAndroid Build Coastguard Worker { 2305*58b9f456SAndroid Build Coastguard Worker __b[0] = __traits_.translate_nocase(__b[0]); 2306*58b9f456SAndroid Build Coastguard Worker __e[0] = __traits_.translate_nocase(__e[0]); 2307*58b9f456SAndroid Build Coastguard Worker } 2308*58b9f456SAndroid Build Coastguard Worker __ranges_.push_back(make_pair(_VSTD::move(__b), _VSTD::move(__e))); 2309*58b9f456SAndroid Build Coastguard Worker } 2310*58b9f456SAndroid Build Coastguard Worker } 2311*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2312*58b9f456SAndroid Build Coastguard Worker void __add_digraph(_CharT __c1, _CharT __c2) 2313*58b9f456SAndroid Build Coastguard Worker { 2314*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2315*58b9f456SAndroid Build Coastguard Worker __digraphs_.push_back(make_pair(__traits_.translate_nocase(__c1), 2316*58b9f456SAndroid Build Coastguard Worker __traits_.translate_nocase(__c2))); 2317*58b9f456SAndroid Build Coastguard Worker else if (__collate_) 2318*58b9f456SAndroid Build Coastguard Worker __digraphs_.push_back(make_pair(__traits_.translate(__c1), 2319*58b9f456SAndroid Build Coastguard Worker __traits_.translate(__c2))); 2320*58b9f456SAndroid Build Coastguard Worker else 2321*58b9f456SAndroid Build Coastguard Worker __digraphs_.push_back(make_pair(__c1, __c2)); 2322*58b9f456SAndroid Build Coastguard Worker } 2323*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2324*58b9f456SAndroid Build Coastguard Worker void __add_equivalence(const string_type& __s) 2325*58b9f456SAndroid Build Coastguard Worker {__equivalences_.push_back(__s);} 2326*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2327*58b9f456SAndroid Build Coastguard Worker void __add_class(typename regex_traits<_CharT>::char_class_type __mask) 2328*58b9f456SAndroid Build Coastguard Worker {__mask_ |= __mask;} 2329*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2330*58b9f456SAndroid Build Coastguard Worker void __add_neg_class(typename regex_traits<_CharT>::char_class_type __mask) 2331*58b9f456SAndroid Build Coastguard Worker {__neg_mask_ |= __mask;} 2332*58b9f456SAndroid Build Coastguard Worker}; 2333*58b9f456SAndroid Build Coastguard Worker 2334*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2335*58b9f456SAndroid Build Coastguard Workervoid 2336*58b9f456SAndroid Build Coastguard Worker__bracket_expression<_CharT, _Traits>::__exec(__state& __s) const 2337*58b9f456SAndroid Build Coastguard Worker{ 2338*58b9f456SAndroid Build Coastguard Worker bool __found = false; 2339*58b9f456SAndroid Build Coastguard Worker unsigned __consumed = 0; 2340*58b9f456SAndroid Build Coastguard Worker if (__s.__current_ != __s.__last_) 2341*58b9f456SAndroid Build Coastguard Worker { 2342*58b9f456SAndroid Build Coastguard Worker ++__consumed; 2343*58b9f456SAndroid Build Coastguard Worker if (__might_have_digraph_) 2344*58b9f456SAndroid Build Coastguard Worker { 2345*58b9f456SAndroid Build Coastguard Worker const _CharT* __next = _VSTD::next(__s.__current_); 2346*58b9f456SAndroid Build Coastguard Worker if (__next != __s.__last_) 2347*58b9f456SAndroid Build Coastguard Worker { 2348*58b9f456SAndroid Build Coastguard Worker pair<_CharT, _CharT> __ch2(*__s.__current_, *__next); 2349*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2350*58b9f456SAndroid Build Coastguard Worker { 2351*58b9f456SAndroid Build Coastguard Worker __ch2.first = __traits_.translate_nocase(__ch2.first); 2352*58b9f456SAndroid Build Coastguard Worker __ch2.second = __traits_.translate_nocase(__ch2.second); 2353*58b9f456SAndroid Build Coastguard Worker } 2354*58b9f456SAndroid Build Coastguard Worker else if (__collate_) 2355*58b9f456SAndroid Build Coastguard Worker { 2356*58b9f456SAndroid Build Coastguard Worker __ch2.first = __traits_.translate(__ch2.first); 2357*58b9f456SAndroid Build Coastguard Worker __ch2.second = __traits_.translate(__ch2.second); 2358*58b9f456SAndroid Build Coastguard Worker } 2359*58b9f456SAndroid Build Coastguard Worker if (!__traits_.lookup_collatename(&__ch2.first, &__ch2.first+2).empty()) 2360*58b9f456SAndroid Build Coastguard Worker { 2361*58b9f456SAndroid Build Coastguard Worker // __ch2 is a digraph in this locale 2362*58b9f456SAndroid Build Coastguard Worker ++__consumed; 2363*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __digraphs_.size(); ++__i) 2364*58b9f456SAndroid Build Coastguard Worker { 2365*58b9f456SAndroid Build Coastguard Worker if (__ch2 == __digraphs_[__i]) 2366*58b9f456SAndroid Build Coastguard Worker { 2367*58b9f456SAndroid Build Coastguard Worker __found = true; 2368*58b9f456SAndroid Build Coastguard Worker goto __exit; 2369*58b9f456SAndroid Build Coastguard Worker } 2370*58b9f456SAndroid Build Coastguard Worker } 2371*58b9f456SAndroid Build Coastguard Worker if (__collate_ && !__ranges_.empty()) 2372*58b9f456SAndroid Build Coastguard Worker { 2373*58b9f456SAndroid Build Coastguard Worker string_type __s2 = __traits_.transform(&__ch2.first, 2374*58b9f456SAndroid Build Coastguard Worker &__ch2.first + 2); 2375*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __ranges_.size(); ++__i) 2376*58b9f456SAndroid Build Coastguard Worker { 2377*58b9f456SAndroid Build Coastguard Worker if (__ranges_[__i].first <= __s2 && 2378*58b9f456SAndroid Build Coastguard Worker __s2 <= __ranges_[__i].second) 2379*58b9f456SAndroid Build Coastguard Worker { 2380*58b9f456SAndroid Build Coastguard Worker __found = true; 2381*58b9f456SAndroid Build Coastguard Worker goto __exit; 2382*58b9f456SAndroid Build Coastguard Worker } 2383*58b9f456SAndroid Build Coastguard Worker } 2384*58b9f456SAndroid Build Coastguard Worker } 2385*58b9f456SAndroid Build Coastguard Worker if (!__equivalences_.empty()) 2386*58b9f456SAndroid Build Coastguard Worker { 2387*58b9f456SAndroid Build Coastguard Worker string_type __s2 = __traits_.transform_primary(&__ch2.first, 2388*58b9f456SAndroid Build Coastguard Worker &__ch2.first + 2); 2389*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __equivalences_.size(); ++__i) 2390*58b9f456SAndroid Build Coastguard Worker { 2391*58b9f456SAndroid Build Coastguard Worker if (__s2 == __equivalences_[__i]) 2392*58b9f456SAndroid Build Coastguard Worker { 2393*58b9f456SAndroid Build Coastguard Worker __found = true; 2394*58b9f456SAndroid Build Coastguard Worker goto __exit; 2395*58b9f456SAndroid Build Coastguard Worker } 2396*58b9f456SAndroid Build Coastguard Worker } 2397*58b9f456SAndroid Build Coastguard Worker } 2398*58b9f456SAndroid Build Coastguard Worker if (__traits_.isctype(__ch2.first, __mask_) && 2399*58b9f456SAndroid Build Coastguard Worker __traits_.isctype(__ch2.second, __mask_)) 2400*58b9f456SAndroid Build Coastguard Worker { 2401*58b9f456SAndroid Build Coastguard Worker __found = true; 2402*58b9f456SAndroid Build Coastguard Worker goto __exit; 2403*58b9f456SAndroid Build Coastguard Worker } 2404*58b9f456SAndroid Build Coastguard Worker if (!__traits_.isctype(__ch2.first, __neg_mask_) && 2405*58b9f456SAndroid Build Coastguard Worker !__traits_.isctype(__ch2.second, __neg_mask_)) 2406*58b9f456SAndroid Build Coastguard Worker { 2407*58b9f456SAndroid Build Coastguard Worker __found = true; 2408*58b9f456SAndroid Build Coastguard Worker goto __exit; 2409*58b9f456SAndroid Build Coastguard Worker } 2410*58b9f456SAndroid Build Coastguard Worker goto __exit; 2411*58b9f456SAndroid Build Coastguard Worker } 2412*58b9f456SAndroid Build Coastguard Worker } 2413*58b9f456SAndroid Build Coastguard Worker } 2414*58b9f456SAndroid Build Coastguard Worker // test *__s.__current_ as not a digraph 2415*58b9f456SAndroid Build Coastguard Worker _CharT __ch = *__s.__current_; 2416*58b9f456SAndroid Build Coastguard Worker if (__icase_) 2417*58b9f456SAndroid Build Coastguard Worker __ch = __traits_.translate_nocase(__ch); 2418*58b9f456SAndroid Build Coastguard Worker else if (__collate_) 2419*58b9f456SAndroid Build Coastguard Worker __ch = __traits_.translate(__ch); 2420*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __chars_.size(); ++__i) 2421*58b9f456SAndroid Build Coastguard Worker { 2422*58b9f456SAndroid Build Coastguard Worker if (__ch == __chars_[__i]) 2423*58b9f456SAndroid Build Coastguard Worker { 2424*58b9f456SAndroid Build Coastguard Worker __found = true; 2425*58b9f456SAndroid Build Coastguard Worker goto __exit; 2426*58b9f456SAndroid Build Coastguard Worker } 2427*58b9f456SAndroid Build Coastguard Worker } 2428*58b9f456SAndroid Build Coastguard Worker // When there's at least one of __neg_chars_ and __neg_mask_, the set 2429*58b9f456SAndroid Build Coastguard Worker // of "__found" chars is 2430*58b9f456SAndroid Build Coastguard Worker // union(complement(union(__neg_chars_, __neg_mask_)), 2431*58b9f456SAndroid Build Coastguard Worker // other cases...) 2432*58b9f456SAndroid Build Coastguard Worker // 2433*58b9f456SAndroid Build Coastguard Worker // It doesn't make sense to check this when there are no __neg_chars_ 2434*58b9f456SAndroid Build Coastguard Worker // and no __neg_mask_. 2435*58b9f456SAndroid Build Coastguard Worker if (!(__neg_mask_ == 0 && __neg_chars_.empty())) 2436*58b9f456SAndroid Build Coastguard Worker { 2437*58b9f456SAndroid Build Coastguard Worker const bool __in_neg_mask = __traits_.isctype(__ch, __neg_mask_); 2438*58b9f456SAndroid Build Coastguard Worker const bool __in_neg_chars = 2439*58b9f456SAndroid Build Coastguard Worker std::find(__neg_chars_.begin(), __neg_chars_.end(), __ch) != 2440*58b9f456SAndroid Build Coastguard Worker __neg_chars_.end(); 2441*58b9f456SAndroid Build Coastguard Worker if (!(__in_neg_mask || __in_neg_chars)) 2442*58b9f456SAndroid Build Coastguard Worker { 2443*58b9f456SAndroid Build Coastguard Worker __found = true; 2444*58b9f456SAndroid Build Coastguard Worker goto __exit; 2445*58b9f456SAndroid Build Coastguard Worker } 2446*58b9f456SAndroid Build Coastguard Worker } 2447*58b9f456SAndroid Build Coastguard Worker if (!__ranges_.empty()) 2448*58b9f456SAndroid Build Coastguard Worker { 2449*58b9f456SAndroid Build Coastguard Worker string_type __s2 = __collate_ ? 2450*58b9f456SAndroid Build Coastguard Worker __traits_.transform(&__ch, &__ch + 1) : 2451*58b9f456SAndroid Build Coastguard Worker string_type(1, __ch); 2452*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __ranges_.size(); ++__i) 2453*58b9f456SAndroid Build Coastguard Worker { 2454*58b9f456SAndroid Build Coastguard Worker if (__ranges_[__i].first <= __s2 && __s2 <= __ranges_[__i].second) 2455*58b9f456SAndroid Build Coastguard Worker { 2456*58b9f456SAndroid Build Coastguard Worker __found = true; 2457*58b9f456SAndroid Build Coastguard Worker goto __exit; 2458*58b9f456SAndroid Build Coastguard Worker } 2459*58b9f456SAndroid Build Coastguard Worker } 2460*58b9f456SAndroid Build Coastguard Worker } 2461*58b9f456SAndroid Build Coastguard Worker if (!__equivalences_.empty()) 2462*58b9f456SAndroid Build Coastguard Worker { 2463*58b9f456SAndroid Build Coastguard Worker string_type __s2 = __traits_.transform_primary(&__ch, &__ch + 1); 2464*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __equivalences_.size(); ++__i) 2465*58b9f456SAndroid Build Coastguard Worker { 2466*58b9f456SAndroid Build Coastguard Worker if (__s2 == __equivalences_[__i]) 2467*58b9f456SAndroid Build Coastguard Worker { 2468*58b9f456SAndroid Build Coastguard Worker __found = true; 2469*58b9f456SAndroid Build Coastguard Worker goto __exit; 2470*58b9f456SAndroid Build Coastguard Worker } 2471*58b9f456SAndroid Build Coastguard Worker } 2472*58b9f456SAndroid Build Coastguard Worker } 2473*58b9f456SAndroid Build Coastguard Worker if (__traits_.isctype(__ch, __mask_)) 2474*58b9f456SAndroid Build Coastguard Worker { 2475*58b9f456SAndroid Build Coastguard Worker __found = true; 2476*58b9f456SAndroid Build Coastguard Worker goto __exit; 2477*58b9f456SAndroid Build Coastguard Worker } 2478*58b9f456SAndroid Build Coastguard Worker } 2479*58b9f456SAndroid Build Coastguard Worker else 2480*58b9f456SAndroid Build Coastguard Worker __found = __negate_; // force reject 2481*58b9f456SAndroid Build Coastguard Worker__exit: 2482*58b9f456SAndroid Build Coastguard Worker if (__found != __negate_) 2483*58b9f456SAndroid Build Coastguard Worker { 2484*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_and_consume; 2485*58b9f456SAndroid Build Coastguard Worker __s.__current_ += __consumed; 2486*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 2487*58b9f456SAndroid Build Coastguard Worker } 2488*58b9f456SAndroid Build Coastguard Worker else 2489*58b9f456SAndroid Build Coastguard Worker { 2490*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 2491*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 2492*58b9f456SAndroid Build Coastguard Worker } 2493*58b9f456SAndroid Build Coastguard Worker} 2494*58b9f456SAndroid Build Coastguard Worker 2495*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> class __lookahead; 2496*58b9f456SAndroid Build Coastguard Worker 2497*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits = regex_traits<_CharT> > 2498*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS basic_regex 2499*58b9f456SAndroid Build Coastguard Worker{ 2500*58b9f456SAndroid Build Coastguard Workerpublic: 2501*58b9f456SAndroid Build Coastguard Worker // types: 2502*58b9f456SAndroid Build Coastguard Worker typedef _CharT value_type; 2503*58b9f456SAndroid Build Coastguard Worker typedef _Traits traits_type; 2504*58b9f456SAndroid Build Coastguard Worker typedef typename _Traits::string_type string_type; 2505*58b9f456SAndroid Build Coastguard Worker typedef regex_constants::syntax_option_type flag_type; 2506*58b9f456SAndroid Build Coastguard Worker typedef typename _Traits::locale_type locale_type; 2507*58b9f456SAndroid Build Coastguard Worker 2508*58b9f456SAndroid Build Coastguard Workerprivate: 2509*58b9f456SAndroid Build Coastguard Worker _Traits __traits_; 2510*58b9f456SAndroid Build Coastguard Worker flag_type __flags_; 2511*58b9f456SAndroid Build Coastguard Worker unsigned __marked_count_; 2512*58b9f456SAndroid Build Coastguard Worker unsigned __loop_count_; 2513*58b9f456SAndroid Build Coastguard Worker int __open_count_; 2514*58b9f456SAndroid Build Coastguard Worker shared_ptr<__empty_state<_CharT> > __start_; 2515*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __end_; 2516*58b9f456SAndroid Build Coastguard Worker 2517*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 2518*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__node<_CharT> __node; 2519*58b9f456SAndroid Build Coastguard Worker 2520*58b9f456SAndroid Build Coastguard Workerpublic: 2521*58b9f456SAndroid Build Coastguard Worker // constants: 2522*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type icase = regex_constants::icase; 2523*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type nosubs = regex_constants::nosubs; 2524*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type optimize = regex_constants::optimize; 2525*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type collate = regex_constants::collate; 2526*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript; 2527*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type basic = regex_constants::basic; 2528*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type extended = regex_constants::extended; 2529*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type awk = regex_constants::awk; 2530*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type grep = regex_constants::grep; 2531*58b9f456SAndroid Build Coastguard Worker static const regex_constants::syntax_option_type egrep = regex_constants::egrep; 2532*58b9f456SAndroid Build Coastguard Worker 2533*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 2534*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2535*58b9f456SAndroid Build Coastguard Worker basic_regex() 2536*58b9f456SAndroid Build Coastguard Worker : __flags_(), __marked_count_(0), __loop_count_(0), __open_count_(0), 2537*58b9f456SAndroid Build Coastguard Worker __end_(0) 2538*58b9f456SAndroid Build Coastguard Worker {} 2539*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2540*58b9f456SAndroid Build Coastguard Worker explicit basic_regex(const value_type* __p, flag_type __f = regex_constants::ECMAScript) 2541*58b9f456SAndroid Build Coastguard Worker : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), 2542*58b9f456SAndroid Build Coastguard Worker __end_(0) 2543*58b9f456SAndroid Build Coastguard Worker {__parse(__p, __p + __traits_.length(__p));} 2544*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2545*58b9f456SAndroid Build Coastguard Worker basic_regex(const value_type* __p, size_t __len, flag_type __f = regex_constants::ECMAScript) 2546*58b9f456SAndroid Build Coastguard Worker : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), 2547*58b9f456SAndroid Build Coastguard Worker __end_(0) 2548*58b9f456SAndroid Build Coastguard Worker {__parse(__p, __p + __len);} 2549*58b9f456SAndroid Build Coastguard Worker// basic_regex(const basic_regex&) = default; 2550*58b9f456SAndroid Build Coastguard Worker// basic_regex(basic_regex&&) = default; 2551*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA> 2552*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2553*58b9f456SAndroid Build Coastguard Worker explicit basic_regex(const basic_string<value_type, _ST, _SA>& __p, 2554*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2555*58b9f456SAndroid Build Coastguard Worker : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), 2556*58b9f456SAndroid Build Coastguard Worker __end_(0) 2557*58b9f456SAndroid Build Coastguard Worker {__parse(__p.begin(), __p.end());} 2558*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2559*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2560*58b9f456SAndroid Build Coastguard Worker basic_regex(_ForwardIterator __first, _ForwardIterator __last, 2561*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2562*58b9f456SAndroid Build Coastguard Worker : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), 2563*58b9f456SAndroid Build Coastguard Worker __end_(0) 2564*58b9f456SAndroid Build Coastguard Worker {__parse(__first, __last);} 2565*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2566*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2567*58b9f456SAndroid Build Coastguard Worker basic_regex(initializer_list<value_type> __il, 2568*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2569*58b9f456SAndroid Build Coastguard Worker : __flags_(__f), __marked_count_(0), __loop_count_(0), __open_count_(0), 2570*58b9f456SAndroid Build Coastguard Worker __end_(0) 2571*58b9f456SAndroid Build Coastguard Worker {__parse(__il.begin(), __il.end());} 2572*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2573*58b9f456SAndroid Build Coastguard Worker 2574*58b9f456SAndroid Build Coastguard Worker// ~basic_regex() = default; 2575*58b9f456SAndroid Build Coastguard Worker 2576*58b9f456SAndroid Build Coastguard Worker// basic_regex& operator=(const basic_regex&) = default; 2577*58b9f456SAndroid Build Coastguard Worker// basic_regex& operator=(basic_regex&&) = default; 2578*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2579*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(const value_type* __p) 2580*58b9f456SAndroid Build Coastguard Worker {return assign(__p);} 2581*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2582*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2583*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(initializer_list<value_type> __il) 2584*58b9f456SAndroid Build Coastguard Worker {return assign(__il);} 2585*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2586*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA> 2587*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2588*58b9f456SAndroid Build Coastguard Worker basic_regex& operator=(const basic_string<value_type, _ST, _SA>& __p) 2589*58b9f456SAndroid Build Coastguard Worker {return assign(__p);} 2590*58b9f456SAndroid Build Coastguard Worker 2591*58b9f456SAndroid Build Coastguard Worker // assign: 2592*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2593*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const basic_regex& __that) 2594*58b9f456SAndroid Build Coastguard Worker {return *this = __that;} 2595*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2596*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2597*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(basic_regex&& __that) _NOEXCEPT 2598*58b9f456SAndroid Build Coastguard Worker {return *this = _VSTD::move(__that);} 2599*58b9f456SAndroid Build Coastguard Worker#endif 2600*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2601*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const value_type* __p, flag_type __f = regex_constants::ECMAScript) 2602*58b9f456SAndroid Build Coastguard Worker {return assign(__p, __p + __traits_.length(__p), __f);} 2603*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2604*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const value_type* __p, size_t __len, flag_type __f) 2605*58b9f456SAndroid Build Coastguard Worker {return assign(__p, __p + __len, __f);} 2606*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA> 2607*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2608*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(const basic_string<value_type, _ST, _SA>& __s, 2609*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2610*58b9f456SAndroid Build Coastguard Worker {return assign(__s.begin(), __s.end(), __f);} 2611*58b9f456SAndroid Build Coastguard Worker 2612*58b9f456SAndroid Build Coastguard Worker template <class _InputIterator> 2613*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2614*58b9f456SAndroid Build Coastguard Worker typename enable_if 2615*58b9f456SAndroid Build Coastguard Worker < 2616*58b9f456SAndroid Build Coastguard Worker __is_input_iterator <_InputIterator>::value && 2617*58b9f456SAndroid Build Coastguard Worker !__is_forward_iterator<_InputIterator>::value, 2618*58b9f456SAndroid Build Coastguard Worker basic_regex& 2619*58b9f456SAndroid Build Coastguard Worker >::type 2620*58b9f456SAndroid Build Coastguard Worker assign(_InputIterator __first, _InputIterator __last, 2621*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2622*58b9f456SAndroid Build Coastguard Worker { 2623*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __t(__first, __last); 2624*58b9f456SAndroid Build Coastguard Worker return assign(__t.begin(), __t.end(), __f); 2625*58b9f456SAndroid Build Coastguard Worker } 2626*58b9f456SAndroid Build Coastguard Worker 2627*58b9f456SAndroid Build Coastguard Workerprivate: 2628*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2629*58b9f456SAndroid Build Coastguard Worker void __member_init(flag_type __f) 2630*58b9f456SAndroid Build Coastguard Worker { 2631*58b9f456SAndroid Build Coastguard Worker __flags_ = __f; 2632*58b9f456SAndroid Build Coastguard Worker __marked_count_ = 0; 2633*58b9f456SAndroid Build Coastguard Worker __loop_count_ = 0; 2634*58b9f456SAndroid Build Coastguard Worker __open_count_ = 0; 2635*58b9f456SAndroid Build Coastguard Worker __end_ = nullptr; 2636*58b9f456SAndroid Build Coastguard Worker } 2637*58b9f456SAndroid Build Coastguard Workerpublic: 2638*58b9f456SAndroid Build Coastguard Worker 2639*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2640*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2641*58b9f456SAndroid Build Coastguard Worker typename enable_if 2642*58b9f456SAndroid Build Coastguard Worker < 2643*58b9f456SAndroid Build Coastguard Worker __is_forward_iterator<_ForwardIterator>::value, 2644*58b9f456SAndroid Build Coastguard Worker basic_regex& 2645*58b9f456SAndroid Build Coastguard Worker >::type 2646*58b9f456SAndroid Build Coastguard Worker assign(_ForwardIterator __first, _ForwardIterator __last, 2647*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2648*58b9f456SAndroid Build Coastguard Worker { 2649*58b9f456SAndroid Build Coastguard Worker return assign(basic_regex(__first, __last, __f)); 2650*58b9f456SAndroid Build Coastguard Worker } 2651*58b9f456SAndroid Build Coastguard Worker 2652*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2653*58b9f456SAndroid Build Coastguard Worker 2654*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2655*58b9f456SAndroid Build Coastguard Worker basic_regex& assign(initializer_list<value_type> __il, 2656*58b9f456SAndroid Build Coastguard Worker flag_type __f = regex_constants::ECMAScript) 2657*58b9f456SAndroid Build Coastguard Worker {return assign(__il.begin(), __il.end(), __f);} 2658*58b9f456SAndroid Build Coastguard Worker 2659*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2660*58b9f456SAndroid Build Coastguard Worker 2661*58b9f456SAndroid Build Coastguard Worker // const operations: 2662*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2663*58b9f456SAndroid Build Coastguard Worker unsigned mark_count() const {return __marked_count_;} 2664*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2665*58b9f456SAndroid Build Coastguard Worker flag_type flags() const {return __flags_;} 2666*58b9f456SAndroid Build Coastguard Worker 2667*58b9f456SAndroid Build Coastguard Worker // locale: 2668*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2669*58b9f456SAndroid Build Coastguard Worker locale_type imbue(locale_type __loc) 2670*58b9f456SAndroid Build Coastguard Worker { 2671*58b9f456SAndroid Build Coastguard Worker __member_init(ECMAScript); 2672*58b9f456SAndroid Build Coastguard Worker __start_.reset(); 2673*58b9f456SAndroid Build Coastguard Worker return __traits_.imbue(__loc); 2674*58b9f456SAndroid Build Coastguard Worker } 2675*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2676*58b9f456SAndroid Build Coastguard Worker locale_type getloc() const {return __traits_.getloc();} 2677*58b9f456SAndroid Build Coastguard Worker 2678*58b9f456SAndroid Build Coastguard Worker // swap: 2679*58b9f456SAndroid Build Coastguard Worker void swap(basic_regex& __r); 2680*58b9f456SAndroid Build Coastguard Worker 2681*58b9f456SAndroid Build Coastguard Workerprivate: 2682*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2683*58b9f456SAndroid Build Coastguard Worker unsigned __loop_count() const {return __loop_count_;} 2684*58b9f456SAndroid Build Coastguard Worker 2685*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2686*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2687*58b9f456SAndroid Build Coastguard Worker __parse(_ForwardIterator __first, _ForwardIterator __last); 2688*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2689*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2690*58b9f456SAndroid Build Coastguard Worker __parse_basic_reg_exp(_ForwardIterator __first, _ForwardIterator __last); 2691*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2692*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2693*58b9f456SAndroid Build Coastguard Worker __parse_RE_expression(_ForwardIterator __first, _ForwardIterator __last); 2694*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2695*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2696*58b9f456SAndroid Build Coastguard Worker __parse_simple_RE(_ForwardIterator __first, _ForwardIterator __last); 2697*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2698*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2699*58b9f456SAndroid Build Coastguard Worker __parse_nondupl_RE(_ForwardIterator __first, _ForwardIterator __last); 2700*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2701*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2702*58b9f456SAndroid Build Coastguard Worker __parse_one_char_or_coll_elem_RE(_ForwardIterator __first, _ForwardIterator __last); 2703*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2704*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2705*58b9f456SAndroid Build Coastguard Worker __parse_Back_open_paren(_ForwardIterator __first, _ForwardIterator __last); 2706*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2707*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2708*58b9f456SAndroid Build Coastguard Worker __parse_Back_close_paren(_ForwardIterator __first, _ForwardIterator __last); 2709*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2710*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2711*58b9f456SAndroid Build Coastguard Worker __parse_Back_open_brace(_ForwardIterator __first, _ForwardIterator __last); 2712*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2713*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2714*58b9f456SAndroid Build Coastguard Worker __parse_Back_close_brace(_ForwardIterator __first, _ForwardIterator __last); 2715*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2716*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2717*58b9f456SAndroid Build Coastguard Worker __parse_BACKREF(_ForwardIterator __first, _ForwardIterator __last); 2718*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2719*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2720*58b9f456SAndroid Build Coastguard Worker __parse_ORD_CHAR(_ForwardIterator __first, _ForwardIterator __last); 2721*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2722*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2723*58b9f456SAndroid Build Coastguard Worker __parse_QUOTED_CHAR(_ForwardIterator __first, _ForwardIterator __last); 2724*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2725*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2726*58b9f456SAndroid Build Coastguard Worker __parse_RE_dupl_symbol(_ForwardIterator __first, _ForwardIterator __last, 2727*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s, 2728*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin, unsigned __mexp_end); 2729*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2730*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2731*58b9f456SAndroid Build Coastguard Worker __parse_ERE_dupl_symbol(_ForwardIterator __first, _ForwardIterator __last, 2732*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s, 2733*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin, unsigned __mexp_end); 2734*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2735*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2736*58b9f456SAndroid Build Coastguard Worker __parse_bracket_expression(_ForwardIterator __first, _ForwardIterator __last); 2737*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2738*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2739*58b9f456SAndroid Build Coastguard Worker __parse_follow_list(_ForwardIterator __first, _ForwardIterator __last, 2740*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml); 2741*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2742*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2743*58b9f456SAndroid Build Coastguard Worker __parse_expression_term(_ForwardIterator __first, _ForwardIterator __last, 2744*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml); 2745*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2746*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2747*58b9f456SAndroid Build Coastguard Worker __parse_equivalence_class(_ForwardIterator __first, _ForwardIterator __last, 2748*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml); 2749*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2750*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2751*58b9f456SAndroid Build Coastguard Worker __parse_character_class(_ForwardIterator __first, _ForwardIterator __last, 2752*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml); 2753*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2754*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2755*58b9f456SAndroid Build Coastguard Worker __parse_collating_symbol(_ForwardIterator __first, _ForwardIterator __last, 2756*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>& __col_sym); 2757*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2758*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2759*58b9f456SAndroid Build Coastguard Worker __parse_DUP_COUNT(_ForwardIterator __first, _ForwardIterator __last, int& __c); 2760*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2761*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2762*58b9f456SAndroid Build Coastguard Worker __parse_extended_reg_exp(_ForwardIterator __first, _ForwardIterator __last); 2763*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2764*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2765*58b9f456SAndroid Build Coastguard Worker __parse_ERE_branch(_ForwardIterator __first, _ForwardIterator __last); 2766*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2767*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2768*58b9f456SAndroid Build Coastguard Worker __parse_ERE_expression(_ForwardIterator __first, _ForwardIterator __last); 2769*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2770*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2771*58b9f456SAndroid Build Coastguard Worker __parse_one_char_or_coll_elem_ERE(_ForwardIterator __first, _ForwardIterator __last); 2772*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2773*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2774*58b9f456SAndroid Build Coastguard Worker __parse_ORD_CHAR_ERE(_ForwardIterator __first, _ForwardIterator __last); 2775*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2776*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2777*58b9f456SAndroid Build Coastguard Worker __parse_QUOTED_CHAR_ERE(_ForwardIterator __first, _ForwardIterator __last); 2778*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2779*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2780*58b9f456SAndroid Build Coastguard Worker __parse_ecma_exp(_ForwardIterator __first, _ForwardIterator __last); 2781*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2782*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2783*58b9f456SAndroid Build Coastguard Worker __parse_alternative(_ForwardIterator __first, _ForwardIterator __last); 2784*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2785*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2786*58b9f456SAndroid Build Coastguard Worker __parse_term(_ForwardIterator __first, _ForwardIterator __last); 2787*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2788*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2789*58b9f456SAndroid Build Coastguard Worker __parse_assertion(_ForwardIterator __first, _ForwardIterator __last); 2790*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2791*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2792*58b9f456SAndroid Build Coastguard Worker __parse_atom(_ForwardIterator __first, _ForwardIterator __last); 2793*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2794*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2795*58b9f456SAndroid Build Coastguard Worker __parse_atom_escape(_ForwardIterator __first, _ForwardIterator __last); 2796*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2797*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2798*58b9f456SAndroid Build Coastguard Worker __parse_decimal_escape(_ForwardIterator __first, _ForwardIterator __last); 2799*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2800*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2801*58b9f456SAndroid Build Coastguard Worker __parse_character_class_escape(_ForwardIterator __first, _ForwardIterator __last); 2802*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2803*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2804*58b9f456SAndroid Build Coastguard Worker __parse_character_escape(_ForwardIterator __first, _ForwardIterator __last, 2805*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>* __str = nullptr); 2806*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2807*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2808*58b9f456SAndroid Build Coastguard Worker __parse_pattern_character(_ForwardIterator __first, _ForwardIterator __last); 2809*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2810*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2811*58b9f456SAndroid Build Coastguard Worker __parse_grep(_ForwardIterator __first, _ForwardIterator __last); 2812*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2813*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2814*58b9f456SAndroid Build Coastguard Worker __parse_egrep(_ForwardIterator __first, _ForwardIterator __last); 2815*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2816*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2817*58b9f456SAndroid Build Coastguard Worker __parse_class_escape(_ForwardIterator __first, _ForwardIterator __last, 2818*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>& __str, 2819*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml); 2820*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 2821*58b9f456SAndroid Build Coastguard Worker _ForwardIterator 2822*58b9f456SAndroid Build Coastguard Worker __parse_awk_escape(_ForwardIterator __first, _ForwardIterator __last, 2823*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>* __str = nullptr); 2824*58b9f456SAndroid Build Coastguard Worker 2825*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2826*58b9f456SAndroid Build Coastguard Worker void __push_l_anchor(); 2827*58b9f456SAndroid Build Coastguard Worker void __push_r_anchor(); 2828*58b9f456SAndroid Build Coastguard Worker void __push_match_any(); 2829*58b9f456SAndroid Build Coastguard Worker void __push_match_any_but_newline(); 2830*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2831*58b9f456SAndroid Build Coastguard Worker void __push_greedy_inf_repeat(size_t __min, __owns_one_state<_CharT>* __s, 2832*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin = 0, unsigned __mexp_end = 0) 2833*58b9f456SAndroid Build Coastguard Worker {__push_loop(__min, numeric_limits<size_t>::max(), __s, 2834*58b9f456SAndroid Build Coastguard Worker __mexp_begin, __mexp_end);} 2835*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2836*58b9f456SAndroid Build Coastguard Worker void __push_nongreedy_inf_repeat(size_t __min, __owns_one_state<_CharT>* __s, 2837*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin = 0, unsigned __mexp_end = 0) 2838*58b9f456SAndroid Build Coastguard Worker {__push_loop(__min, numeric_limits<size_t>::max(), __s, 2839*58b9f456SAndroid Build Coastguard Worker __mexp_begin, __mexp_end, false);} 2840*58b9f456SAndroid Build Coastguard Worker void __push_loop(size_t __min, size_t __max, __owns_one_state<_CharT>* __s, 2841*58b9f456SAndroid Build Coastguard Worker size_t __mexp_begin = 0, size_t __mexp_end = 0, 2842*58b9f456SAndroid Build Coastguard Worker bool __greedy = true); 2843*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __start_matching_list(bool __negate); 2844*58b9f456SAndroid Build Coastguard Worker void __push_char(value_type __c); 2845*58b9f456SAndroid Build Coastguard Worker void __push_back_ref(int __i); 2846*58b9f456SAndroid Build Coastguard Worker void __push_alternation(__owns_one_state<_CharT>* __sa, 2847*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sb); 2848*58b9f456SAndroid Build Coastguard Worker void __push_begin_marked_subexpression(); 2849*58b9f456SAndroid Build Coastguard Worker void __push_end_marked_subexpression(unsigned); 2850*58b9f456SAndroid Build Coastguard Worker void __push_empty(); 2851*58b9f456SAndroid Build Coastguard Worker void __push_word_boundary(bool); 2852*58b9f456SAndroid Build Coastguard Worker void __push_lookahead(const basic_regex&, bool, unsigned); 2853*58b9f456SAndroid Build Coastguard Worker 2854*58b9f456SAndroid Build Coastguard Worker template <class _Allocator> 2855*58b9f456SAndroid Build Coastguard Worker bool 2856*58b9f456SAndroid Build Coastguard Worker __search(const _CharT* __first, const _CharT* __last, 2857*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 2858*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags) const; 2859*58b9f456SAndroid Build Coastguard Worker 2860*58b9f456SAndroid Build Coastguard Worker template <class _Allocator> 2861*58b9f456SAndroid Build Coastguard Worker bool 2862*58b9f456SAndroid Build Coastguard Worker __match_at_start(const _CharT* __first, const _CharT* __last, 2863*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 2864*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool) const; 2865*58b9f456SAndroid Build Coastguard Worker template <class _Allocator> 2866*58b9f456SAndroid Build Coastguard Worker bool 2867*58b9f456SAndroid Build Coastguard Worker __match_at_start_ecma(const _CharT* __first, const _CharT* __last, 2868*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 2869*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool) const; 2870*58b9f456SAndroid Build Coastguard Worker template <class _Allocator> 2871*58b9f456SAndroid Build Coastguard Worker bool 2872*58b9f456SAndroid Build Coastguard Worker __match_at_start_posix_nosubs(const _CharT* __first, const _CharT* __last, 2873*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 2874*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool) const; 2875*58b9f456SAndroid Build Coastguard Worker template <class _Allocator> 2876*58b9f456SAndroid Build Coastguard Worker bool 2877*58b9f456SAndroid Build Coastguard Worker __match_at_start_posix_subs(const _CharT* __first, const _CharT* __last, 2878*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 2879*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool) const; 2880*58b9f456SAndroid Build Coastguard Worker 2881*58b9f456SAndroid Build Coastguard Worker template <class _Bp, class _Ap, class _Cp, class _Tp> 2882*58b9f456SAndroid Build Coastguard Worker friend 2883*58b9f456SAndroid Build Coastguard Worker bool 2884*58b9f456SAndroid Build Coastguard Worker regex_search(_Bp, _Bp, match_results<_Bp, _Ap>&, const basic_regex<_Cp, _Tp>&, 2885*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type); 2886*58b9f456SAndroid Build Coastguard Worker 2887*58b9f456SAndroid Build Coastguard Worker template <class _Ap, class _Cp, class _Tp> 2888*58b9f456SAndroid Build Coastguard Worker friend 2889*58b9f456SAndroid Build Coastguard Worker bool 2890*58b9f456SAndroid Build Coastguard Worker regex_search(const _Cp*, const _Cp*, match_results<const _Cp*, _Ap>&, 2891*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>&, regex_constants::match_flag_type); 2892*58b9f456SAndroid Build Coastguard Worker 2893*58b9f456SAndroid Build Coastguard Worker template <class _Bp, class _Cp, class _Tp> 2894*58b9f456SAndroid Build Coastguard Worker friend 2895*58b9f456SAndroid Build Coastguard Worker bool 2896*58b9f456SAndroid Build Coastguard Worker regex_search(_Bp, _Bp, const basic_regex<_Cp, _Tp>&, 2897*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type); 2898*58b9f456SAndroid Build Coastguard Worker 2899*58b9f456SAndroid Build Coastguard Worker template <class _Cp, class _Tp> 2900*58b9f456SAndroid Build Coastguard Worker friend 2901*58b9f456SAndroid Build Coastguard Worker bool 2902*58b9f456SAndroid Build Coastguard Worker regex_search(const _Cp*, const _Cp*, 2903*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>&, regex_constants::match_flag_type); 2904*58b9f456SAndroid Build Coastguard Worker 2905*58b9f456SAndroid Build Coastguard Worker template <class _Cp, class _Ap, class _Tp> 2906*58b9f456SAndroid Build Coastguard Worker friend 2907*58b9f456SAndroid Build Coastguard Worker bool 2908*58b9f456SAndroid Build Coastguard Worker regex_search(const _Cp*, match_results<const _Cp*, _Ap>&, const basic_regex<_Cp, _Tp>&, 2909*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type); 2910*58b9f456SAndroid Build Coastguard Worker 2911*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA, class _Cp, class _Tp> 2912*58b9f456SAndroid Build Coastguard Worker friend 2913*58b9f456SAndroid Build Coastguard Worker bool 2914*58b9f456SAndroid Build Coastguard Worker regex_search(const basic_string<_Cp, _ST, _SA>& __s, 2915*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>& __e, 2916*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags); 2917*58b9f456SAndroid Build Coastguard Worker 2918*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA, class _Ap, class _Cp, class _Tp> 2919*58b9f456SAndroid Build Coastguard Worker friend 2920*58b9f456SAndroid Build Coastguard Worker bool 2921*58b9f456SAndroid Build Coastguard Worker regex_search(const basic_string<_Cp, _ST, _SA>& __s, 2922*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<_Cp, _ST, _SA>::const_iterator, _Ap>&, 2923*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>& __e, 2924*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags); 2925*58b9f456SAndroid Build Coastguard Worker 2926*58b9f456SAndroid Build Coastguard Worker template <class _Iter, class _Ap, class _Cp, class _Tp> 2927*58b9f456SAndroid Build Coastguard Worker friend 2928*58b9f456SAndroid Build Coastguard Worker bool 2929*58b9f456SAndroid Build Coastguard Worker regex_search(__wrap_iter<_Iter> __first, 2930*58b9f456SAndroid Build Coastguard Worker __wrap_iter<_Iter> __last, 2931*58b9f456SAndroid Build Coastguard Worker match_results<__wrap_iter<_Iter>, _Ap>& __m, 2932*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>& __e, 2933*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags); 2934*58b9f456SAndroid Build Coastguard Worker 2935*58b9f456SAndroid Build Coastguard Worker template <class, class> friend class __lookahead; 2936*58b9f456SAndroid Build Coastguard Worker}; 2937*58b9f456SAndroid Build Coastguard Worker 2938*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES 2939*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator, 2940*58b9f456SAndroid Build Coastguard Worker class = typename enable_if<__is_forward_iterator<_ForwardIterator>::value, nullptr_t>::type 2941*58b9f456SAndroid Build Coastguard Worker> 2942*58b9f456SAndroid Build Coastguard Workerbasic_regex(_ForwardIterator, _ForwardIterator, 2943*58b9f456SAndroid Build Coastguard Worker regex_constants::syntax_option_type = regex_constants::ECMAScript) 2944*58b9f456SAndroid Build Coastguard Worker -> basic_regex<typename iterator_traits<_ForwardIterator>::value_type>; 2945*58b9f456SAndroid Build Coastguard Worker#endif 2946*58b9f456SAndroid Build Coastguard Worker 2947*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2948*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::icase; 2949*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2950*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::nosubs; 2951*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2952*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::optimize; 2953*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2954*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::collate; 2955*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2956*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::ECMAScript; 2957*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2958*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::basic; 2959*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2960*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::extended; 2961*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2962*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::awk; 2963*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2964*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::grep; 2965*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2966*58b9f456SAndroid Build Coastguard Worker const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::egrep; 2967*58b9f456SAndroid Build Coastguard Worker 2968*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2969*58b9f456SAndroid Build Coastguard Workervoid 2970*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::swap(basic_regex& __r) 2971*58b9f456SAndroid Build Coastguard Worker{ 2972*58b9f456SAndroid Build Coastguard Worker using _VSTD::swap; 2973*58b9f456SAndroid Build Coastguard Worker swap(__traits_, __r.__traits_); 2974*58b9f456SAndroid Build Coastguard Worker swap(__flags_, __r.__flags_); 2975*58b9f456SAndroid Build Coastguard Worker swap(__marked_count_, __r.__marked_count_); 2976*58b9f456SAndroid Build Coastguard Worker swap(__loop_count_, __r.__loop_count_); 2977*58b9f456SAndroid Build Coastguard Worker swap(__open_count_, __r.__open_count_); 2978*58b9f456SAndroid Build Coastguard Worker swap(__start_, __r.__start_); 2979*58b9f456SAndroid Build Coastguard Worker swap(__end_, __r.__end_); 2980*58b9f456SAndroid Build Coastguard Worker} 2981*58b9f456SAndroid Build Coastguard Worker 2982*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2983*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2984*58b9f456SAndroid Build Coastguard Workervoid 2985*58b9f456SAndroid Build Coastguard Workerswap(basic_regex<_CharT, _Traits>& __x, basic_regex<_CharT, _Traits>& __y) 2986*58b9f456SAndroid Build Coastguard Worker{ 2987*58b9f456SAndroid Build Coastguard Worker return __x.swap(__y); 2988*58b9f456SAndroid Build Coastguard Worker} 2989*58b9f456SAndroid Build Coastguard Worker 2990*58b9f456SAndroid Build Coastguard Worker// __lookahead 2991*58b9f456SAndroid Build Coastguard Worker 2992*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 2993*58b9f456SAndroid Build Coastguard Workerclass __lookahead 2994*58b9f456SAndroid Build Coastguard Worker : public __owns_one_state<_CharT> 2995*58b9f456SAndroid Build Coastguard Worker{ 2996*58b9f456SAndroid Build Coastguard Worker typedef __owns_one_state<_CharT> base; 2997*58b9f456SAndroid Build Coastguard Worker 2998*58b9f456SAndroid Build Coastguard Worker basic_regex<_CharT, _Traits> __exp_; 2999*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_; 3000*58b9f456SAndroid Build Coastguard Worker bool __invert_; 3001*58b9f456SAndroid Build Coastguard Worker 3002*58b9f456SAndroid Build Coastguard Worker __lookahead(const __lookahead&); 3003*58b9f456SAndroid Build Coastguard Worker __lookahead& operator=(const __lookahead&); 3004*58b9f456SAndroid Build Coastguard Workerpublic: 3005*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::__state<_CharT> __state; 3006*58b9f456SAndroid Build Coastguard Worker 3007*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 3008*58b9f456SAndroid Build Coastguard Worker __lookahead(const basic_regex<_CharT, _Traits>& __exp, bool __invert, __node<_CharT>* __s, unsigned __mexp) 3009*58b9f456SAndroid Build Coastguard Worker : base(__s), __exp_(__exp), __mexp_(__mexp), __invert_(__invert) {} 3010*58b9f456SAndroid Build Coastguard Worker 3011*58b9f456SAndroid Build Coastguard Worker virtual void __exec(__state&) const; 3012*58b9f456SAndroid Build Coastguard Worker}; 3013*58b9f456SAndroid Build Coastguard Worker 3014*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3015*58b9f456SAndroid Build Coastguard Workervoid 3016*58b9f456SAndroid Build Coastguard Worker__lookahead<_CharT, _Traits>::__exec(__state& __s) const 3017*58b9f456SAndroid Build Coastguard Worker{ 3018*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __m; 3019*58b9f456SAndroid Build Coastguard Worker __m.__init(1 + __exp_.mark_count(), __s.__current_, __s.__last_); 3020*58b9f456SAndroid Build Coastguard Worker bool __matched = __exp_.__match_at_start_ecma( 3021*58b9f456SAndroid Build Coastguard Worker __s.__current_, __s.__last_, 3022*58b9f456SAndroid Build Coastguard Worker __m, 3023*58b9f456SAndroid Build Coastguard Worker (__s.__flags_ | regex_constants::match_continuous) & 3024*58b9f456SAndroid Build Coastguard Worker ~regex_constants::__full_match, 3025*58b9f456SAndroid Build Coastguard Worker __s.__at_first_ && __s.__current_ == __s.__first_); 3026*58b9f456SAndroid Build Coastguard Worker if (__matched != __invert_) 3027*58b9f456SAndroid Build Coastguard Worker { 3028*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__accept_but_not_consume; 3029*58b9f456SAndroid Build Coastguard Worker __s.__node_ = this->first(); 3030*58b9f456SAndroid Build Coastguard Worker for (unsigned __i = 1; __i < __m.size(); ++__i) { 3031*58b9f456SAndroid Build Coastguard Worker __s.__sub_matches_[__mexp_ + __i - 1] = __m.__matches_[__i]; 3032*58b9f456SAndroid Build Coastguard Worker } 3033*58b9f456SAndroid Build Coastguard Worker } 3034*58b9f456SAndroid Build Coastguard Worker else 3035*58b9f456SAndroid Build Coastguard Worker { 3036*58b9f456SAndroid Build Coastguard Worker __s.__do_ = __state::__reject; 3037*58b9f456SAndroid Build Coastguard Worker __s.__node_ = nullptr; 3038*58b9f456SAndroid Build Coastguard Worker } 3039*58b9f456SAndroid Build Coastguard Worker} 3040*58b9f456SAndroid Build Coastguard Worker 3041*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3042*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3043*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3044*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse(_ForwardIterator __first, 3045*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3046*58b9f456SAndroid Build Coastguard Worker{ 3047*58b9f456SAndroid Build Coastguard Worker { 3048*58b9f456SAndroid Build Coastguard Worker unique_ptr<__node> __h(new __end_state<_CharT>); 3049*58b9f456SAndroid Build Coastguard Worker __start_.reset(new __empty_state<_CharT>(__h.get())); 3050*58b9f456SAndroid Build Coastguard Worker __h.release(); 3051*58b9f456SAndroid Build Coastguard Worker __end_ = __start_.get(); 3052*58b9f456SAndroid Build Coastguard Worker } 3053*58b9f456SAndroid Build Coastguard Worker switch (__flags_ & 0x1F0) 3054*58b9f456SAndroid Build Coastguard Worker { 3055*58b9f456SAndroid Build Coastguard Worker case ECMAScript: 3056*58b9f456SAndroid Build Coastguard Worker __first = __parse_ecma_exp(__first, __last); 3057*58b9f456SAndroid Build Coastguard Worker break; 3058*58b9f456SAndroid Build Coastguard Worker case basic: 3059*58b9f456SAndroid Build Coastguard Worker __first = __parse_basic_reg_exp(__first, __last); 3060*58b9f456SAndroid Build Coastguard Worker break; 3061*58b9f456SAndroid Build Coastguard Worker case extended: 3062*58b9f456SAndroid Build Coastguard Worker case awk: 3063*58b9f456SAndroid Build Coastguard Worker __first = __parse_extended_reg_exp(__first, __last); 3064*58b9f456SAndroid Build Coastguard Worker break; 3065*58b9f456SAndroid Build Coastguard Worker case grep: 3066*58b9f456SAndroid Build Coastguard Worker __first = __parse_grep(__first, __last); 3067*58b9f456SAndroid Build Coastguard Worker break; 3068*58b9f456SAndroid Build Coastguard Worker case egrep: 3069*58b9f456SAndroid Build Coastguard Worker __first = __parse_egrep(__first, __last); 3070*58b9f456SAndroid Build Coastguard Worker break; 3071*58b9f456SAndroid Build Coastguard Worker default: 3072*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_grammar>(); 3073*58b9f456SAndroid Build Coastguard Worker } 3074*58b9f456SAndroid Build Coastguard Worker return __first; 3075*58b9f456SAndroid Build Coastguard Worker} 3076*58b9f456SAndroid Build Coastguard Worker 3077*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3078*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3079*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3080*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_basic_reg_exp(_ForwardIterator __first, 3081*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3082*58b9f456SAndroid Build Coastguard Worker{ 3083*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3084*58b9f456SAndroid Build Coastguard Worker { 3085*58b9f456SAndroid Build Coastguard Worker if (*__first == '^') 3086*58b9f456SAndroid Build Coastguard Worker { 3087*58b9f456SAndroid Build Coastguard Worker __push_l_anchor(); 3088*58b9f456SAndroid Build Coastguard Worker ++__first; 3089*58b9f456SAndroid Build Coastguard Worker } 3090*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3091*58b9f456SAndroid Build Coastguard Worker { 3092*58b9f456SAndroid Build Coastguard Worker __first = __parse_RE_expression(__first, __last); 3093*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3094*58b9f456SAndroid Build Coastguard Worker { 3095*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3096*58b9f456SAndroid Build Coastguard Worker if (__temp == __last && *__first == '$') 3097*58b9f456SAndroid Build Coastguard Worker { 3098*58b9f456SAndroid Build Coastguard Worker __push_r_anchor(); 3099*58b9f456SAndroid Build Coastguard Worker ++__first; 3100*58b9f456SAndroid Build Coastguard Worker } 3101*58b9f456SAndroid Build Coastguard Worker } 3102*58b9f456SAndroid Build Coastguard Worker } 3103*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3104*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_empty>(); 3105*58b9f456SAndroid Build Coastguard Worker } 3106*58b9f456SAndroid Build Coastguard Worker return __first; 3107*58b9f456SAndroid Build Coastguard Worker} 3108*58b9f456SAndroid Build Coastguard Worker 3109*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3110*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3111*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3112*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_extended_reg_exp(_ForwardIterator __first, 3113*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3114*58b9f456SAndroid Build Coastguard Worker{ 3115*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sa = __end_; 3116*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_ERE_branch(__first, __last); 3117*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3118*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_empty>(); 3119*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3120*58b9f456SAndroid Build Coastguard Worker while (__first != __last && *__first == '|') 3121*58b9f456SAndroid Build Coastguard Worker { 3122*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sb = __end_; 3123*58b9f456SAndroid Build Coastguard Worker __temp = __parse_ERE_branch(++__first, __last); 3124*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3125*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_empty>(); 3126*58b9f456SAndroid Build Coastguard Worker __push_alternation(__sa, __sb); 3127*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3128*58b9f456SAndroid Build Coastguard Worker } 3129*58b9f456SAndroid Build Coastguard Worker return __first; 3130*58b9f456SAndroid Build Coastguard Worker} 3131*58b9f456SAndroid Build Coastguard Worker 3132*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3133*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3134*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3135*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ERE_branch(_ForwardIterator __first, 3136*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3137*58b9f456SAndroid Build Coastguard Worker{ 3138*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_ERE_expression(__first, __last); 3139*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3140*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_empty>(); 3141*58b9f456SAndroid Build Coastguard Worker do 3142*58b9f456SAndroid Build Coastguard Worker { 3143*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3144*58b9f456SAndroid Build Coastguard Worker __temp = __parse_ERE_expression(__first, __last); 3145*58b9f456SAndroid Build Coastguard Worker } while (__temp != __first); 3146*58b9f456SAndroid Build Coastguard Worker return __first; 3147*58b9f456SAndroid Build Coastguard Worker} 3148*58b9f456SAndroid Build Coastguard Worker 3149*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3150*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3151*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3152*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ERE_expression(_ForwardIterator __first, 3153*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3154*58b9f456SAndroid Build Coastguard Worker{ 3155*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __e = __end_; 3156*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin = __marked_count_; 3157*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_one_char_or_coll_elem_ERE(__first, __last); 3158*58b9f456SAndroid Build Coastguard Worker if (__temp == __first && __temp != __last) 3159*58b9f456SAndroid Build Coastguard Worker { 3160*58b9f456SAndroid Build Coastguard Worker switch (*__temp) 3161*58b9f456SAndroid Build Coastguard Worker { 3162*58b9f456SAndroid Build Coastguard Worker case '^': 3163*58b9f456SAndroid Build Coastguard Worker __push_l_anchor(); 3164*58b9f456SAndroid Build Coastguard Worker ++__temp; 3165*58b9f456SAndroid Build Coastguard Worker break; 3166*58b9f456SAndroid Build Coastguard Worker case '$': 3167*58b9f456SAndroid Build Coastguard Worker __push_r_anchor(); 3168*58b9f456SAndroid Build Coastguard Worker ++__temp; 3169*58b9f456SAndroid Build Coastguard Worker break; 3170*58b9f456SAndroid Build Coastguard Worker case '(': 3171*58b9f456SAndroid Build Coastguard Worker __push_begin_marked_subexpression(); 3172*58b9f456SAndroid Build Coastguard Worker unsigned __temp_count = __marked_count_; 3173*58b9f456SAndroid Build Coastguard Worker ++__open_count_; 3174*58b9f456SAndroid Build Coastguard Worker __temp = __parse_extended_reg_exp(++__temp, __last); 3175*58b9f456SAndroid Build Coastguard Worker if (__temp == __last || *__temp != ')') 3176*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 3177*58b9f456SAndroid Build Coastguard Worker __push_end_marked_subexpression(__temp_count); 3178*58b9f456SAndroid Build Coastguard Worker --__open_count_; 3179*58b9f456SAndroid Build Coastguard Worker ++__temp; 3180*58b9f456SAndroid Build Coastguard Worker break; 3181*58b9f456SAndroid Build Coastguard Worker } 3182*58b9f456SAndroid Build Coastguard Worker } 3183*58b9f456SAndroid Build Coastguard Worker if (__temp != __first) 3184*58b9f456SAndroid Build Coastguard Worker __temp = __parse_ERE_dupl_symbol(__temp, __last, __e, __mexp_begin+1, 3185*58b9f456SAndroid Build Coastguard Worker __marked_count_+1); 3186*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3187*58b9f456SAndroid Build Coastguard Worker return __first; 3188*58b9f456SAndroid Build Coastguard Worker} 3189*58b9f456SAndroid Build Coastguard Worker 3190*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3191*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3192*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3193*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_RE_expression(_ForwardIterator __first, 3194*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3195*58b9f456SAndroid Build Coastguard Worker{ 3196*58b9f456SAndroid Build Coastguard Worker while (true) 3197*58b9f456SAndroid Build Coastguard Worker { 3198*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_simple_RE(__first, __last); 3199*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3200*58b9f456SAndroid Build Coastguard Worker break; 3201*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3202*58b9f456SAndroid Build Coastguard Worker } 3203*58b9f456SAndroid Build Coastguard Worker return __first; 3204*58b9f456SAndroid Build Coastguard Worker} 3205*58b9f456SAndroid Build Coastguard Worker 3206*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3207*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3208*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3209*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_simple_RE(_ForwardIterator __first, 3210*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3211*58b9f456SAndroid Build Coastguard Worker{ 3212*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3213*58b9f456SAndroid Build Coastguard Worker { 3214*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __e = __end_; 3215*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin = __marked_count_; 3216*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_nondupl_RE(__first, __last); 3217*58b9f456SAndroid Build Coastguard Worker if (__temp != __first) 3218*58b9f456SAndroid Build Coastguard Worker __first = __parse_RE_dupl_symbol(__temp, __last, __e, 3219*58b9f456SAndroid Build Coastguard Worker __mexp_begin+1, __marked_count_+1); 3220*58b9f456SAndroid Build Coastguard Worker } 3221*58b9f456SAndroid Build Coastguard Worker return __first; 3222*58b9f456SAndroid Build Coastguard Worker} 3223*58b9f456SAndroid Build Coastguard Worker 3224*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3225*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3226*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3227*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_nondupl_RE(_ForwardIterator __first, 3228*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3229*58b9f456SAndroid Build Coastguard Worker{ 3230*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __first; 3231*58b9f456SAndroid Build Coastguard Worker __first = __parse_one_char_or_coll_elem_RE(__first, __last); 3232*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3233*58b9f456SAndroid Build Coastguard Worker { 3234*58b9f456SAndroid Build Coastguard Worker __temp = __parse_Back_open_paren(__first, __last); 3235*58b9f456SAndroid Build Coastguard Worker if (__temp != __first) 3236*58b9f456SAndroid Build Coastguard Worker { 3237*58b9f456SAndroid Build Coastguard Worker __push_begin_marked_subexpression(); 3238*58b9f456SAndroid Build Coastguard Worker unsigned __temp_count = __marked_count_; 3239*58b9f456SAndroid Build Coastguard Worker __first = __parse_RE_expression(__temp, __last); 3240*58b9f456SAndroid Build Coastguard Worker __temp = __parse_Back_close_paren(__first, __last); 3241*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3242*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 3243*58b9f456SAndroid Build Coastguard Worker __push_end_marked_subexpression(__temp_count); 3244*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3245*58b9f456SAndroid Build Coastguard Worker } 3246*58b9f456SAndroid Build Coastguard Worker else 3247*58b9f456SAndroid Build Coastguard Worker __first = __parse_BACKREF(__first, __last); 3248*58b9f456SAndroid Build Coastguard Worker } 3249*58b9f456SAndroid Build Coastguard Worker return __first; 3250*58b9f456SAndroid Build Coastguard Worker} 3251*58b9f456SAndroid Build Coastguard Worker 3252*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3253*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3254*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3255*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_one_char_or_coll_elem_RE( 3256*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __first, 3257*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3258*58b9f456SAndroid Build Coastguard Worker{ 3259*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_ORD_CHAR(__first, __last); 3260*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3261*58b9f456SAndroid Build Coastguard Worker { 3262*58b9f456SAndroid Build Coastguard Worker __temp = __parse_QUOTED_CHAR(__first, __last); 3263*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3264*58b9f456SAndroid Build Coastguard Worker { 3265*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__temp == '.') 3266*58b9f456SAndroid Build Coastguard Worker { 3267*58b9f456SAndroid Build Coastguard Worker __push_match_any(); 3268*58b9f456SAndroid Build Coastguard Worker ++__temp; 3269*58b9f456SAndroid Build Coastguard Worker } 3270*58b9f456SAndroid Build Coastguard Worker else 3271*58b9f456SAndroid Build Coastguard Worker __temp = __parse_bracket_expression(__first, __last); 3272*58b9f456SAndroid Build Coastguard Worker } 3273*58b9f456SAndroid Build Coastguard Worker } 3274*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3275*58b9f456SAndroid Build Coastguard Worker return __first; 3276*58b9f456SAndroid Build Coastguard Worker} 3277*58b9f456SAndroid Build Coastguard Worker 3278*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3279*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3280*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3281*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_one_char_or_coll_elem_ERE( 3282*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __first, 3283*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3284*58b9f456SAndroid Build Coastguard Worker{ 3285*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_ORD_CHAR_ERE(__first, __last); 3286*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3287*58b9f456SAndroid Build Coastguard Worker { 3288*58b9f456SAndroid Build Coastguard Worker __temp = __parse_QUOTED_CHAR_ERE(__first, __last); 3289*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3290*58b9f456SAndroid Build Coastguard Worker { 3291*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__temp == '.') 3292*58b9f456SAndroid Build Coastguard Worker { 3293*58b9f456SAndroid Build Coastguard Worker __push_match_any(); 3294*58b9f456SAndroid Build Coastguard Worker ++__temp; 3295*58b9f456SAndroid Build Coastguard Worker } 3296*58b9f456SAndroid Build Coastguard Worker else 3297*58b9f456SAndroid Build Coastguard Worker __temp = __parse_bracket_expression(__first, __last); 3298*58b9f456SAndroid Build Coastguard Worker } 3299*58b9f456SAndroid Build Coastguard Worker } 3300*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3301*58b9f456SAndroid Build Coastguard Worker return __first; 3302*58b9f456SAndroid Build Coastguard Worker} 3303*58b9f456SAndroid Build Coastguard Worker 3304*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3305*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3306*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3307*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_Back_open_paren(_ForwardIterator __first, 3308*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3309*58b9f456SAndroid Build Coastguard Worker{ 3310*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3311*58b9f456SAndroid Build Coastguard Worker { 3312*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3313*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3314*58b9f456SAndroid Build Coastguard Worker { 3315*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\' && *__temp == '(') 3316*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3317*58b9f456SAndroid Build Coastguard Worker } 3318*58b9f456SAndroid Build Coastguard Worker } 3319*58b9f456SAndroid Build Coastguard Worker return __first; 3320*58b9f456SAndroid Build Coastguard Worker} 3321*58b9f456SAndroid Build Coastguard Worker 3322*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3323*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3324*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3325*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_Back_close_paren(_ForwardIterator __first, 3326*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3327*58b9f456SAndroid Build Coastguard Worker{ 3328*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3329*58b9f456SAndroid Build Coastguard Worker { 3330*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3331*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3332*58b9f456SAndroid Build Coastguard Worker { 3333*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\' && *__temp == ')') 3334*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3335*58b9f456SAndroid Build Coastguard Worker } 3336*58b9f456SAndroid Build Coastguard Worker } 3337*58b9f456SAndroid Build Coastguard Worker return __first; 3338*58b9f456SAndroid Build Coastguard Worker} 3339*58b9f456SAndroid Build Coastguard Worker 3340*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3341*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3342*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3343*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_Back_open_brace(_ForwardIterator __first, 3344*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3345*58b9f456SAndroid Build Coastguard Worker{ 3346*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3347*58b9f456SAndroid Build Coastguard Worker { 3348*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3349*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3350*58b9f456SAndroid Build Coastguard Worker { 3351*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\' && *__temp == '{') 3352*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3353*58b9f456SAndroid Build Coastguard Worker } 3354*58b9f456SAndroid Build Coastguard Worker } 3355*58b9f456SAndroid Build Coastguard Worker return __first; 3356*58b9f456SAndroid Build Coastguard Worker} 3357*58b9f456SAndroid Build Coastguard Worker 3358*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3359*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3360*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3361*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_Back_close_brace(_ForwardIterator __first, 3362*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3363*58b9f456SAndroid Build Coastguard Worker{ 3364*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3365*58b9f456SAndroid Build Coastguard Worker { 3366*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3367*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3368*58b9f456SAndroid Build Coastguard Worker { 3369*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\' && *__temp == '}') 3370*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3371*58b9f456SAndroid Build Coastguard Worker } 3372*58b9f456SAndroid Build Coastguard Worker } 3373*58b9f456SAndroid Build Coastguard Worker return __first; 3374*58b9f456SAndroid Build Coastguard Worker} 3375*58b9f456SAndroid Build Coastguard Worker 3376*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3377*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3378*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3379*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_BACKREF(_ForwardIterator __first, 3380*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3381*58b9f456SAndroid Build Coastguard Worker{ 3382*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3383*58b9f456SAndroid Build Coastguard Worker { 3384*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3385*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3386*58b9f456SAndroid Build Coastguard Worker { 3387*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\') 3388*58b9f456SAndroid Build Coastguard Worker { 3389*58b9f456SAndroid Build Coastguard Worker int __val = __traits_.value(*__temp, 10); 3390*58b9f456SAndroid Build Coastguard Worker if (__val >= 1 && __val <= 9) 3391*58b9f456SAndroid Build Coastguard Worker { 3392*58b9f456SAndroid Build Coastguard Worker __push_back_ref(__val); 3393*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3394*58b9f456SAndroid Build Coastguard Worker } 3395*58b9f456SAndroid Build Coastguard Worker } 3396*58b9f456SAndroid Build Coastguard Worker } 3397*58b9f456SAndroid Build Coastguard Worker } 3398*58b9f456SAndroid Build Coastguard Worker return __first; 3399*58b9f456SAndroid Build Coastguard Worker} 3400*58b9f456SAndroid Build Coastguard Worker 3401*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3402*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3403*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3404*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ORD_CHAR(_ForwardIterator __first, 3405*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3406*58b9f456SAndroid Build Coastguard Worker{ 3407*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3408*58b9f456SAndroid Build Coastguard Worker { 3409*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3410*58b9f456SAndroid Build Coastguard Worker if (__temp == __last && *__first == '$') 3411*58b9f456SAndroid Build Coastguard Worker return __first; 3412*58b9f456SAndroid Build Coastguard Worker // Not called inside a bracket 3413*58b9f456SAndroid Build Coastguard Worker if (*__first == '.' || *__first == '\\' || *__first == '[') 3414*58b9f456SAndroid Build Coastguard Worker return __first; 3415*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 3416*58b9f456SAndroid Build Coastguard Worker ++__first; 3417*58b9f456SAndroid Build Coastguard Worker } 3418*58b9f456SAndroid Build Coastguard Worker return __first; 3419*58b9f456SAndroid Build Coastguard Worker} 3420*58b9f456SAndroid Build Coastguard Worker 3421*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3422*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3423*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3424*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ORD_CHAR_ERE(_ForwardIterator __first, 3425*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3426*58b9f456SAndroid Build Coastguard Worker{ 3427*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3428*58b9f456SAndroid Build Coastguard Worker { 3429*58b9f456SAndroid Build Coastguard Worker switch (*__first) 3430*58b9f456SAndroid Build Coastguard Worker { 3431*58b9f456SAndroid Build Coastguard Worker case '^': 3432*58b9f456SAndroid Build Coastguard Worker case '.': 3433*58b9f456SAndroid Build Coastguard Worker case '[': 3434*58b9f456SAndroid Build Coastguard Worker case '$': 3435*58b9f456SAndroid Build Coastguard Worker case '(': 3436*58b9f456SAndroid Build Coastguard Worker case '|': 3437*58b9f456SAndroid Build Coastguard Worker case '*': 3438*58b9f456SAndroid Build Coastguard Worker case '+': 3439*58b9f456SAndroid Build Coastguard Worker case '?': 3440*58b9f456SAndroid Build Coastguard Worker case '{': 3441*58b9f456SAndroid Build Coastguard Worker case '\\': 3442*58b9f456SAndroid Build Coastguard Worker break; 3443*58b9f456SAndroid Build Coastguard Worker case ')': 3444*58b9f456SAndroid Build Coastguard Worker if (__open_count_ == 0) 3445*58b9f456SAndroid Build Coastguard Worker { 3446*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 3447*58b9f456SAndroid Build Coastguard Worker ++__first; 3448*58b9f456SAndroid Build Coastguard Worker } 3449*58b9f456SAndroid Build Coastguard Worker break; 3450*58b9f456SAndroid Build Coastguard Worker default: 3451*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 3452*58b9f456SAndroid Build Coastguard Worker ++__first; 3453*58b9f456SAndroid Build Coastguard Worker break; 3454*58b9f456SAndroid Build Coastguard Worker } 3455*58b9f456SAndroid Build Coastguard Worker } 3456*58b9f456SAndroid Build Coastguard Worker return __first; 3457*58b9f456SAndroid Build Coastguard Worker} 3458*58b9f456SAndroid Build Coastguard Worker 3459*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3460*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3461*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3462*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_QUOTED_CHAR(_ForwardIterator __first, 3463*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3464*58b9f456SAndroid Build Coastguard Worker{ 3465*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3466*58b9f456SAndroid Build Coastguard Worker { 3467*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3468*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3469*58b9f456SAndroid Build Coastguard Worker { 3470*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\') 3471*58b9f456SAndroid Build Coastguard Worker { 3472*58b9f456SAndroid Build Coastguard Worker switch (*__temp) 3473*58b9f456SAndroid Build Coastguard Worker { 3474*58b9f456SAndroid Build Coastguard Worker case '^': 3475*58b9f456SAndroid Build Coastguard Worker case '.': 3476*58b9f456SAndroid Build Coastguard Worker case '*': 3477*58b9f456SAndroid Build Coastguard Worker case '[': 3478*58b9f456SAndroid Build Coastguard Worker case '$': 3479*58b9f456SAndroid Build Coastguard Worker case '\\': 3480*58b9f456SAndroid Build Coastguard Worker __push_char(*__temp); 3481*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3482*58b9f456SAndroid Build Coastguard Worker break; 3483*58b9f456SAndroid Build Coastguard Worker } 3484*58b9f456SAndroid Build Coastguard Worker } 3485*58b9f456SAndroid Build Coastguard Worker } 3486*58b9f456SAndroid Build Coastguard Worker } 3487*58b9f456SAndroid Build Coastguard Worker return __first; 3488*58b9f456SAndroid Build Coastguard Worker} 3489*58b9f456SAndroid Build Coastguard Worker 3490*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3491*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3492*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3493*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_QUOTED_CHAR_ERE(_ForwardIterator __first, 3494*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3495*58b9f456SAndroid Build Coastguard Worker{ 3496*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3497*58b9f456SAndroid Build Coastguard Worker { 3498*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3499*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 3500*58b9f456SAndroid Build Coastguard Worker { 3501*58b9f456SAndroid Build Coastguard Worker if (*__first == '\\') 3502*58b9f456SAndroid Build Coastguard Worker { 3503*58b9f456SAndroid Build Coastguard Worker switch (*__temp) 3504*58b9f456SAndroid Build Coastguard Worker { 3505*58b9f456SAndroid Build Coastguard Worker case '^': 3506*58b9f456SAndroid Build Coastguard Worker case '.': 3507*58b9f456SAndroid Build Coastguard Worker case '*': 3508*58b9f456SAndroid Build Coastguard Worker case '[': 3509*58b9f456SAndroid Build Coastguard Worker case '$': 3510*58b9f456SAndroid Build Coastguard Worker case '\\': 3511*58b9f456SAndroid Build Coastguard Worker case '(': 3512*58b9f456SAndroid Build Coastguard Worker case ')': 3513*58b9f456SAndroid Build Coastguard Worker case '|': 3514*58b9f456SAndroid Build Coastguard Worker case '+': 3515*58b9f456SAndroid Build Coastguard Worker case '?': 3516*58b9f456SAndroid Build Coastguard Worker case '{': 3517*58b9f456SAndroid Build Coastguard Worker case '}': 3518*58b9f456SAndroid Build Coastguard Worker __push_char(*__temp); 3519*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 3520*58b9f456SAndroid Build Coastguard Worker break; 3521*58b9f456SAndroid Build Coastguard Worker default: 3522*58b9f456SAndroid Build Coastguard Worker if ((__flags_ & 0x1F0) == awk) 3523*58b9f456SAndroid Build Coastguard Worker __first = __parse_awk_escape(++__first, __last); 3524*58b9f456SAndroid Build Coastguard Worker break; 3525*58b9f456SAndroid Build Coastguard Worker } 3526*58b9f456SAndroid Build Coastguard Worker } 3527*58b9f456SAndroid Build Coastguard Worker } 3528*58b9f456SAndroid Build Coastguard Worker } 3529*58b9f456SAndroid Build Coastguard Worker return __first; 3530*58b9f456SAndroid Build Coastguard Worker} 3531*58b9f456SAndroid Build Coastguard Worker 3532*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3533*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3534*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3535*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_RE_dupl_symbol(_ForwardIterator __first, 3536*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3537*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s, 3538*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin, 3539*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_end) 3540*58b9f456SAndroid Build Coastguard Worker{ 3541*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3542*58b9f456SAndroid Build Coastguard Worker { 3543*58b9f456SAndroid Build Coastguard Worker if (*__first == '*') 3544*58b9f456SAndroid Build Coastguard Worker { 3545*58b9f456SAndroid Build Coastguard Worker __push_greedy_inf_repeat(0, __s, __mexp_begin, __mexp_end); 3546*58b9f456SAndroid Build Coastguard Worker ++__first; 3547*58b9f456SAndroid Build Coastguard Worker } 3548*58b9f456SAndroid Build Coastguard Worker else 3549*58b9f456SAndroid Build Coastguard Worker { 3550*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_Back_open_brace(__first, __last); 3551*58b9f456SAndroid Build Coastguard Worker if (__temp != __first) 3552*58b9f456SAndroid Build Coastguard Worker { 3553*58b9f456SAndroid Build Coastguard Worker int __min = 0; 3554*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3555*58b9f456SAndroid Build Coastguard Worker __temp = __parse_DUP_COUNT(__first, __last, __min); 3556*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3557*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3558*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3559*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3560*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3561*58b9f456SAndroid Build Coastguard Worker if (*__first != ',') 3562*58b9f456SAndroid Build Coastguard Worker { 3563*58b9f456SAndroid Build Coastguard Worker __temp = __parse_Back_close_brace(__first, __last); 3564*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3565*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3566*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __min, __s, __mexp_begin, __mexp_end, 3567*58b9f456SAndroid Build Coastguard Worker true); 3568*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3569*58b9f456SAndroid Build Coastguard Worker } 3570*58b9f456SAndroid Build Coastguard Worker else 3571*58b9f456SAndroid Build Coastguard Worker { 3572*58b9f456SAndroid Build Coastguard Worker ++__first; // consume ',' 3573*58b9f456SAndroid Build Coastguard Worker int __max = -1; 3574*58b9f456SAndroid Build Coastguard Worker __first = __parse_DUP_COUNT(__first, __last, __max); 3575*58b9f456SAndroid Build Coastguard Worker __temp = __parse_Back_close_brace(__first, __last); 3576*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3577*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3578*58b9f456SAndroid Build Coastguard Worker if (__max == -1) 3579*58b9f456SAndroid Build Coastguard Worker __push_greedy_inf_repeat(__min, __s, __mexp_begin, __mexp_end); 3580*58b9f456SAndroid Build Coastguard Worker else 3581*58b9f456SAndroid Build Coastguard Worker { 3582*58b9f456SAndroid Build Coastguard Worker if (__max < __min) 3583*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3584*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __max, __s, __mexp_begin, __mexp_end, 3585*58b9f456SAndroid Build Coastguard Worker true); 3586*58b9f456SAndroid Build Coastguard Worker } 3587*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3588*58b9f456SAndroid Build Coastguard Worker } 3589*58b9f456SAndroid Build Coastguard Worker } 3590*58b9f456SAndroid Build Coastguard Worker } 3591*58b9f456SAndroid Build Coastguard Worker } 3592*58b9f456SAndroid Build Coastguard Worker return __first; 3593*58b9f456SAndroid Build Coastguard Worker} 3594*58b9f456SAndroid Build Coastguard Worker 3595*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3596*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3597*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3598*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ERE_dupl_symbol(_ForwardIterator __first, 3599*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3600*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s, 3601*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin, 3602*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_end) 3603*58b9f456SAndroid Build Coastguard Worker{ 3604*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3605*58b9f456SAndroid Build Coastguard Worker { 3606*58b9f456SAndroid Build Coastguard Worker unsigned __grammar = __flags_ & 0x1F0; 3607*58b9f456SAndroid Build Coastguard Worker switch (*__first) 3608*58b9f456SAndroid Build Coastguard Worker { 3609*58b9f456SAndroid Build Coastguard Worker case '*': 3610*58b9f456SAndroid Build Coastguard Worker ++__first; 3611*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3612*58b9f456SAndroid Build Coastguard Worker { 3613*58b9f456SAndroid Build Coastguard Worker ++__first; 3614*58b9f456SAndroid Build Coastguard Worker __push_nongreedy_inf_repeat(0, __s, __mexp_begin, __mexp_end); 3615*58b9f456SAndroid Build Coastguard Worker } 3616*58b9f456SAndroid Build Coastguard Worker else 3617*58b9f456SAndroid Build Coastguard Worker __push_greedy_inf_repeat(0, __s, __mexp_begin, __mexp_end); 3618*58b9f456SAndroid Build Coastguard Worker break; 3619*58b9f456SAndroid Build Coastguard Worker case '+': 3620*58b9f456SAndroid Build Coastguard Worker ++__first; 3621*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3622*58b9f456SAndroid Build Coastguard Worker { 3623*58b9f456SAndroid Build Coastguard Worker ++__first; 3624*58b9f456SAndroid Build Coastguard Worker __push_nongreedy_inf_repeat(1, __s, __mexp_begin, __mexp_end); 3625*58b9f456SAndroid Build Coastguard Worker } 3626*58b9f456SAndroid Build Coastguard Worker else 3627*58b9f456SAndroid Build Coastguard Worker __push_greedy_inf_repeat(1, __s, __mexp_begin, __mexp_end); 3628*58b9f456SAndroid Build Coastguard Worker break; 3629*58b9f456SAndroid Build Coastguard Worker case '?': 3630*58b9f456SAndroid Build Coastguard Worker ++__first; 3631*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3632*58b9f456SAndroid Build Coastguard Worker { 3633*58b9f456SAndroid Build Coastguard Worker ++__first; 3634*58b9f456SAndroid Build Coastguard Worker __push_loop(0, 1, __s, __mexp_begin, __mexp_end, false); 3635*58b9f456SAndroid Build Coastguard Worker } 3636*58b9f456SAndroid Build Coastguard Worker else 3637*58b9f456SAndroid Build Coastguard Worker __push_loop(0, 1, __s, __mexp_begin, __mexp_end); 3638*58b9f456SAndroid Build Coastguard Worker break; 3639*58b9f456SAndroid Build Coastguard Worker case '{': 3640*58b9f456SAndroid Build Coastguard Worker { 3641*58b9f456SAndroid Build Coastguard Worker int __min; 3642*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_DUP_COUNT(++__first, __last, __min); 3643*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3644*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3645*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3646*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3647*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3648*58b9f456SAndroid Build Coastguard Worker switch (*__first) 3649*58b9f456SAndroid Build Coastguard Worker { 3650*58b9f456SAndroid Build Coastguard Worker case '}': 3651*58b9f456SAndroid Build Coastguard Worker ++__first; 3652*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3653*58b9f456SAndroid Build Coastguard Worker { 3654*58b9f456SAndroid Build Coastguard Worker ++__first; 3655*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __min, __s, __mexp_begin, __mexp_end, false); 3656*58b9f456SAndroid Build Coastguard Worker } 3657*58b9f456SAndroid Build Coastguard Worker else 3658*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __min, __s, __mexp_begin, __mexp_end); 3659*58b9f456SAndroid Build Coastguard Worker break; 3660*58b9f456SAndroid Build Coastguard Worker case ',': 3661*58b9f456SAndroid Build Coastguard Worker ++__first; 3662*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3663*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3664*58b9f456SAndroid Build Coastguard Worker if (*__first == '}') 3665*58b9f456SAndroid Build Coastguard Worker { 3666*58b9f456SAndroid Build Coastguard Worker ++__first; 3667*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3668*58b9f456SAndroid Build Coastguard Worker { 3669*58b9f456SAndroid Build Coastguard Worker ++__first; 3670*58b9f456SAndroid Build Coastguard Worker __push_nongreedy_inf_repeat(__min, __s, __mexp_begin, __mexp_end); 3671*58b9f456SAndroid Build Coastguard Worker } 3672*58b9f456SAndroid Build Coastguard Worker else 3673*58b9f456SAndroid Build Coastguard Worker __push_greedy_inf_repeat(__min, __s, __mexp_begin, __mexp_end); 3674*58b9f456SAndroid Build Coastguard Worker } 3675*58b9f456SAndroid Build Coastguard Worker else 3676*58b9f456SAndroid Build Coastguard Worker { 3677*58b9f456SAndroid Build Coastguard Worker int __max = -1; 3678*58b9f456SAndroid Build Coastguard Worker __temp = __parse_DUP_COUNT(__first, __last, __max); 3679*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3680*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3681*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3682*58b9f456SAndroid Build Coastguard Worker if (__first == __last || *__first != '}') 3683*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brace>(); 3684*58b9f456SAndroid Build Coastguard Worker ++__first; 3685*58b9f456SAndroid Build Coastguard Worker if (__max < __min) 3686*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3687*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript && __first != __last && *__first == '?') 3688*58b9f456SAndroid Build Coastguard Worker { 3689*58b9f456SAndroid Build Coastguard Worker ++__first; 3690*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __max, __s, __mexp_begin, __mexp_end, false); 3691*58b9f456SAndroid Build Coastguard Worker } 3692*58b9f456SAndroid Build Coastguard Worker else 3693*58b9f456SAndroid Build Coastguard Worker __push_loop(__min, __max, __s, __mexp_begin, __mexp_end); 3694*58b9f456SAndroid Build Coastguard Worker } 3695*58b9f456SAndroid Build Coastguard Worker break; 3696*58b9f456SAndroid Build Coastguard Worker default: 3697*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 3698*58b9f456SAndroid Build Coastguard Worker } 3699*58b9f456SAndroid Build Coastguard Worker } 3700*58b9f456SAndroid Build Coastguard Worker break; 3701*58b9f456SAndroid Build Coastguard Worker } 3702*58b9f456SAndroid Build Coastguard Worker } 3703*58b9f456SAndroid Build Coastguard Worker return __first; 3704*58b9f456SAndroid Build Coastguard Worker} 3705*58b9f456SAndroid Build Coastguard Worker 3706*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3707*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3708*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3709*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_bracket_expression(_ForwardIterator __first, 3710*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 3711*58b9f456SAndroid Build Coastguard Worker{ 3712*58b9f456SAndroid Build Coastguard Worker if (__first != __last && *__first == '[') 3713*58b9f456SAndroid Build Coastguard Worker { 3714*58b9f456SAndroid Build Coastguard Worker ++__first; 3715*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3716*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 3717*58b9f456SAndroid Build Coastguard Worker bool __negate = false; 3718*58b9f456SAndroid Build Coastguard Worker if (*__first == '^') 3719*58b9f456SAndroid Build Coastguard Worker { 3720*58b9f456SAndroid Build Coastguard Worker ++__first; 3721*58b9f456SAndroid Build Coastguard Worker __negate = true; 3722*58b9f456SAndroid Build Coastguard Worker } 3723*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml = __start_matching_list(__negate); 3724*58b9f456SAndroid Build Coastguard Worker // __ml owned by *this 3725*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3726*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 3727*58b9f456SAndroid Build Coastguard Worker if ((__flags_ & 0x1F0) != ECMAScript && *__first == ']') 3728*58b9f456SAndroid Build Coastguard Worker { 3729*58b9f456SAndroid Build Coastguard Worker __ml->__add_char(']'); 3730*58b9f456SAndroid Build Coastguard Worker ++__first; 3731*58b9f456SAndroid Build Coastguard Worker } 3732*58b9f456SAndroid Build Coastguard Worker __first = __parse_follow_list(__first, __last, __ml); 3733*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3734*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 3735*58b9f456SAndroid Build Coastguard Worker if (*__first == '-') 3736*58b9f456SAndroid Build Coastguard Worker { 3737*58b9f456SAndroid Build Coastguard Worker __ml->__add_char('-'); 3738*58b9f456SAndroid Build Coastguard Worker ++__first; 3739*58b9f456SAndroid Build Coastguard Worker } 3740*58b9f456SAndroid Build Coastguard Worker if (__first == __last || *__first != ']') 3741*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 3742*58b9f456SAndroid Build Coastguard Worker ++__first; 3743*58b9f456SAndroid Build Coastguard Worker } 3744*58b9f456SAndroid Build Coastguard Worker return __first; 3745*58b9f456SAndroid Build Coastguard Worker} 3746*58b9f456SAndroid Build Coastguard Worker 3747*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3748*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3749*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3750*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_follow_list(_ForwardIterator __first, 3751*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3752*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml) 3753*58b9f456SAndroid Build Coastguard Worker{ 3754*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 3755*58b9f456SAndroid Build Coastguard Worker { 3756*58b9f456SAndroid Build Coastguard Worker while (true) 3757*58b9f456SAndroid Build Coastguard Worker { 3758*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_expression_term(__first, __last, 3759*58b9f456SAndroid Build Coastguard Worker __ml); 3760*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 3761*58b9f456SAndroid Build Coastguard Worker break; 3762*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3763*58b9f456SAndroid Build Coastguard Worker } 3764*58b9f456SAndroid Build Coastguard Worker } 3765*58b9f456SAndroid Build Coastguard Worker return __first; 3766*58b9f456SAndroid Build Coastguard Worker} 3767*58b9f456SAndroid Build Coastguard Worker 3768*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3769*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3770*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3771*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_expression_term(_ForwardIterator __first, 3772*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3773*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml) 3774*58b9f456SAndroid Build Coastguard Worker{ 3775*58b9f456SAndroid Build Coastguard Worker if (__first != __last && *__first != ']') 3776*58b9f456SAndroid Build Coastguard Worker { 3777*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 3778*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __start_range; 3779*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__first == '[') 3780*58b9f456SAndroid Build Coastguard Worker { 3781*58b9f456SAndroid Build Coastguard Worker if (*__temp == '=') 3782*58b9f456SAndroid Build Coastguard Worker return __parse_equivalence_class(++__temp, __last, __ml); 3783*58b9f456SAndroid Build Coastguard Worker else if (*__temp == ':') 3784*58b9f456SAndroid Build Coastguard Worker return __parse_character_class(++__temp, __last, __ml); 3785*58b9f456SAndroid Build Coastguard Worker else if (*__temp == '.') 3786*58b9f456SAndroid Build Coastguard Worker __first = __parse_collating_symbol(++__temp, __last, __start_range); 3787*58b9f456SAndroid Build Coastguard Worker } 3788*58b9f456SAndroid Build Coastguard Worker unsigned __grammar = __flags_ & 0x1F0; 3789*58b9f456SAndroid Build Coastguard Worker if (__start_range.empty()) 3790*58b9f456SAndroid Build Coastguard Worker { 3791*58b9f456SAndroid Build Coastguard Worker if ((__grammar == ECMAScript || __grammar == awk) && *__first == '\\') 3792*58b9f456SAndroid Build Coastguard Worker { 3793*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript) 3794*58b9f456SAndroid Build Coastguard Worker __first = __parse_class_escape(++__first, __last, __start_range, __ml); 3795*58b9f456SAndroid Build Coastguard Worker else 3796*58b9f456SAndroid Build Coastguard Worker __first = __parse_awk_escape(++__first, __last, &__start_range); 3797*58b9f456SAndroid Build Coastguard Worker } 3798*58b9f456SAndroid Build Coastguard Worker else 3799*58b9f456SAndroid Build Coastguard Worker { 3800*58b9f456SAndroid Build Coastguard Worker __start_range = *__first; 3801*58b9f456SAndroid Build Coastguard Worker ++__first; 3802*58b9f456SAndroid Build Coastguard Worker } 3803*58b9f456SAndroid Build Coastguard Worker } 3804*58b9f456SAndroid Build Coastguard Worker if (__first != __last && *__first != ']') 3805*58b9f456SAndroid Build Coastguard Worker { 3806*58b9f456SAndroid Build Coastguard Worker __temp = _VSTD::next(__first); 3807*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__first == '-' && *__temp != ']') 3808*58b9f456SAndroid Build Coastguard Worker { 3809*58b9f456SAndroid Build Coastguard Worker // parse a range 3810*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __end_range; 3811*58b9f456SAndroid Build Coastguard Worker __first = __temp; 3812*58b9f456SAndroid Build Coastguard Worker ++__temp; 3813*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__first == '[' && *__temp == '.') 3814*58b9f456SAndroid Build Coastguard Worker __first = __parse_collating_symbol(++__temp, __last, __end_range); 3815*58b9f456SAndroid Build Coastguard Worker else 3816*58b9f456SAndroid Build Coastguard Worker { 3817*58b9f456SAndroid Build Coastguard Worker if ((__grammar == ECMAScript || __grammar == awk) && *__first == '\\') 3818*58b9f456SAndroid Build Coastguard Worker { 3819*58b9f456SAndroid Build Coastguard Worker if (__grammar == ECMAScript) 3820*58b9f456SAndroid Build Coastguard Worker __first = __parse_class_escape(++__first, __last, 3821*58b9f456SAndroid Build Coastguard Worker __end_range, __ml); 3822*58b9f456SAndroid Build Coastguard Worker else 3823*58b9f456SAndroid Build Coastguard Worker __first = __parse_awk_escape(++__first, __last, 3824*58b9f456SAndroid Build Coastguard Worker &__end_range); 3825*58b9f456SAndroid Build Coastguard Worker } 3826*58b9f456SAndroid Build Coastguard Worker else 3827*58b9f456SAndroid Build Coastguard Worker { 3828*58b9f456SAndroid Build Coastguard Worker __end_range = *__first; 3829*58b9f456SAndroid Build Coastguard Worker ++__first; 3830*58b9f456SAndroid Build Coastguard Worker } 3831*58b9f456SAndroid Build Coastguard Worker } 3832*58b9f456SAndroid Build Coastguard Worker __ml->__add_range(_VSTD::move(__start_range), _VSTD::move(__end_range)); 3833*58b9f456SAndroid Build Coastguard Worker } 3834*58b9f456SAndroid Build Coastguard Worker else if (!__start_range.empty()) 3835*58b9f456SAndroid Build Coastguard Worker { 3836*58b9f456SAndroid Build Coastguard Worker if (__start_range.size() == 1) 3837*58b9f456SAndroid Build Coastguard Worker __ml->__add_char(__start_range[0]); 3838*58b9f456SAndroid Build Coastguard Worker else 3839*58b9f456SAndroid Build Coastguard Worker __ml->__add_digraph(__start_range[0], __start_range[1]); 3840*58b9f456SAndroid Build Coastguard Worker } 3841*58b9f456SAndroid Build Coastguard Worker } 3842*58b9f456SAndroid Build Coastguard Worker else if (!__start_range.empty()) 3843*58b9f456SAndroid Build Coastguard Worker { 3844*58b9f456SAndroid Build Coastguard Worker if (__start_range.size() == 1) 3845*58b9f456SAndroid Build Coastguard Worker __ml->__add_char(__start_range[0]); 3846*58b9f456SAndroid Build Coastguard Worker else 3847*58b9f456SAndroid Build Coastguard Worker __ml->__add_digraph(__start_range[0], __start_range[1]); 3848*58b9f456SAndroid Build Coastguard Worker } 3849*58b9f456SAndroid Build Coastguard Worker } 3850*58b9f456SAndroid Build Coastguard Worker return __first; 3851*58b9f456SAndroid Build Coastguard Worker} 3852*58b9f456SAndroid Build Coastguard Worker 3853*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3854*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3855*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3856*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_class_escape(_ForwardIterator __first, 3857*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3858*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>& __str, 3859*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml) 3860*58b9f456SAndroid Build Coastguard Worker{ 3861*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3862*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 3863*58b9f456SAndroid Build Coastguard Worker switch (*__first) 3864*58b9f456SAndroid Build Coastguard Worker { 3865*58b9f456SAndroid Build Coastguard Worker case 0: 3866*58b9f456SAndroid Build Coastguard Worker __str = *__first; 3867*58b9f456SAndroid Build Coastguard Worker return ++__first; 3868*58b9f456SAndroid Build Coastguard Worker case 'b': 3869*58b9f456SAndroid Build Coastguard Worker __str = _CharT(8); 3870*58b9f456SAndroid Build Coastguard Worker return ++__first; 3871*58b9f456SAndroid Build Coastguard Worker case 'd': 3872*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::digit); 3873*58b9f456SAndroid Build Coastguard Worker return ++__first; 3874*58b9f456SAndroid Build Coastguard Worker case 'D': 3875*58b9f456SAndroid Build Coastguard Worker __ml->__add_neg_class(ctype_base::digit); 3876*58b9f456SAndroid Build Coastguard Worker return ++__first; 3877*58b9f456SAndroid Build Coastguard Worker case 's': 3878*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::space); 3879*58b9f456SAndroid Build Coastguard Worker return ++__first; 3880*58b9f456SAndroid Build Coastguard Worker case 'S': 3881*58b9f456SAndroid Build Coastguard Worker __ml->__add_neg_class(ctype_base::space); 3882*58b9f456SAndroid Build Coastguard Worker return ++__first; 3883*58b9f456SAndroid Build Coastguard Worker case 'w': 3884*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::alnum); 3885*58b9f456SAndroid Build Coastguard Worker __ml->__add_char('_'); 3886*58b9f456SAndroid Build Coastguard Worker return ++__first; 3887*58b9f456SAndroid Build Coastguard Worker case 'W': 3888*58b9f456SAndroid Build Coastguard Worker __ml->__add_neg_class(ctype_base::alnum); 3889*58b9f456SAndroid Build Coastguard Worker __ml->__add_neg_char('_'); 3890*58b9f456SAndroid Build Coastguard Worker return ++__first; 3891*58b9f456SAndroid Build Coastguard Worker } 3892*58b9f456SAndroid Build Coastguard Worker __first = __parse_character_escape(__first, __last, &__str); 3893*58b9f456SAndroid Build Coastguard Worker return __first; 3894*58b9f456SAndroid Build Coastguard Worker} 3895*58b9f456SAndroid Build Coastguard Worker 3896*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3897*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3898*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3899*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_awk_escape(_ForwardIterator __first, 3900*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3901*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>* __str) 3902*58b9f456SAndroid Build Coastguard Worker{ 3903*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 3904*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 3905*58b9f456SAndroid Build Coastguard Worker switch (*__first) 3906*58b9f456SAndroid Build Coastguard Worker { 3907*58b9f456SAndroid Build Coastguard Worker case '\\': 3908*58b9f456SAndroid Build Coastguard Worker case '"': 3909*58b9f456SAndroid Build Coastguard Worker case '/': 3910*58b9f456SAndroid Build Coastguard Worker if (__str) 3911*58b9f456SAndroid Build Coastguard Worker *__str = *__first; 3912*58b9f456SAndroid Build Coastguard Worker else 3913*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 3914*58b9f456SAndroid Build Coastguard Worker return ++__first; 3915*58b9f456SAndroid Build Coastguard Worker case 'a': 3916*58b9f456SAndroid Build Coastguard Worker if (__str) 3917*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(7); 3918*58b9f456SAndroid Build Coastguard Worker else 3919*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(7)); 3920*58b9f456SAndroid Build Coastguard Worker return ++__first; 3921*58b9f456SAndroid Build Coastguard Worker case 'b': 3922*58b9f456SAndroid Build Coastguard Worker if (__str) 3923*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(8); 3924*58b9f456SAndroid Build Coastguard Worker else 3925*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(8)); 3926*58b9f456SAndroid Build Coastguard Worker return ++__first; 3927*58b9f456SAndroid Build Coastguard Worker case 'f': 3928*58b9f456SAndroid Build Coastguard Worker if (__str) 3929*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xC); 3930*58b9f456SAndroid Build Coastguard Worker else 3931*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xC)); 3932*58b9f456SAndroid Build Coastguard Worker return ++__first; 3933*58b9f456SAndroid Build Coastguard Worker case 'n': 3934*58b9f456SAndroid Build Coastguard Worker if (__str) 3935*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xA); 3936*58b9f456SAndroid Build Coastguard Worker else 3937*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xA)); 3938*58b9f456SAndroid Build Coastguard Worker return ++__first; 3939*58b9f456SAndroid Build Coastguard Worker case 'r': 3940*58b9f456SAndroid Build Coastguard Worker if (__str) 3941*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xD); 3942*58b9f456SAndroid Build Coastguard Worker else 3943*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xD)); 3944*58b9f456SAndroid Build Coastguard Worker return ++__first; 3945*58b9f456SAndroid Build Coastguard Worker case 't': 3946*58b9f456SAndroid Build Coastguard Worker if (__str) 3947*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0x9); 3948*58b9f456SAndroid Build Coastguard Worker else 3949*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0x9)); 3950*58b9f456SAndroid Build Coastguard Worker return ++__first; 3951*58b9f456SAndroid Build Coastguard Worker case 'v': 3952*58b9f456SAndroid Build Coastguard Worker if (__str) 3953*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xB); 3954*58b9f456SAndroid Build Coastguard Worker else 3955*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xB)); 3956*58b9f456SAndroid Build Coastguard Worker return ++__first; 3957*58b9f456SAndroid Build Coastguard Worker } 3958*58b9f456SAndroid Build Coastguard Worker if ('0' <= *__first && *__first <= '7') 3959*58b9f456SAndroid Build Coastguard Worker { 3960*58b9f456SAndroid Build Coastguard Worker unsigned __val = *__first - '0'; 3961*58b9f456SAndroid Build Coastguard Worker if (++__first != __last && ('0' <= *__first && *__first <= '7')) 3962*58b9f456SAndroid Build Coastguard Worker { 3963*58b9f456SAndroid Build Coastguard Worker __val = 8 * __val + *__first - '0'; 3964*58b9f456SAndroid Build Coastguard Worker if (++__first != __last && ('0' <= *__first && *__first <= '7')) 3965*58b9f456SAndroid Build Coastguard Worker __val = 8 * __val + *__first++ - '0'; 3966*58b9f456SAndroid Build Coastguard Worker } 3967*58b9f456SAndroid Build Coastguard Worker if (__str) 3968*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(__val); 3969*58b9f456SAndroid Build Coastguard Worker else 3970*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(__val)); 3971*58b9f456SAndroid Build Coastguard Worker } 3972*58b9f456SAndroid Build Coastguard Worker else 3973*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 3974*58b9f456SAndroid Build Coastguard Worker return __first; 3975*58b9f456SAndroid Build Coastguard Worker} 3976*58b9f456SAndroid Build Coastguard Worker 3977*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 3978*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 3979*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 3980*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_equivalence_class(_ForwardIterator __first, 3981*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 3982*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml) 3983*58b9f456SAndroid Build Coastguard Worker{ 3984*58b9f456SAndroid Build Coastguard Worker // Found [= 3985*58b9f456SAndroid Build Coastguard Worker // This means =] must exist 3986*58b9f456SAndroid Build Coastguard Worker value_type _Equal_close[2] = {'=', ']'}; 3987*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::search(__first, __last, _Equal_close, 3988*58b9f456SAndroid Build Coastguard Worker _Equal_close+2); 3989*58b9f456SAndroid Build Coastguard Worker if (__temp == __last) 3990*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 3991*58b9f456SAndroid Build Coastguard Worker // [__first, __temp) contains all text in [= ... =] 3992*58b9f456SAndroid Build Coastguard Worker string_type __collate_name = 3993*58b9f456SAndroid Build Coastguard Worker __traits_.lookup_collatename(__first, __temp); 3994*58b9f456SAndroid Build Coastguard Worker if (__collate_name.empty()) 3995*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_collate>(); 3996*58b9f456SAndroid Build Coastguard Worker string_type __equiv_name = 3997*58b9f456SAndroid Build Coastguard Worker __traits_.transform_primary(__collate_name.begin(), 3998*58b9f456SAndroid Build Coastguard Worker __collate_name.end()); 3999*58b9f456SAndroid Build Coastguard Worker if (!__equiv_name.empty()) 4000*58b9f456SAndroid Build Coastguard Worker __ml->__add_equivalence(__equiv_name); 4001*58b9f456SAndroid Build Coastguard Worker else 4002*58b9f456SAndroid Build Coastguard Worker { 4003*58b9f456SAndroid Build Coastguard Worker switch (__collate_name.size()) 4004*58b9f456SAndroid Build Coastguard Worker { 4005*58b9f456SAndroid Build Coastguard Worker case 1: 4006*58b9f456SAndroid Build Coastguard Worker __ml->__add_char(__collate_name[0]); 4007*58b9f456SAndroid Build Coastguard Worker break; 4008*58b9f456SAndroid Build Coastguard Worker case 2: 4009*58b9f456SAndroid Build Coastguard Worker __ml->__add_digraph(__collate_name[0], __collate_name[1]); 4010*58b9f456SAndroid Build Coastguard Worker break; 4011*58b9f456SAndroid Build Coastguard Worker default: 4012*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_collate>(); 4013*58b9f456SAndroid Build Coastguard Worker } 4014*58b9f456SAndroid Build Coastguard Worker } 4015*58b9f456SAndroid Build Coastguard Worker __first = _VSTD::next(__temp, 2); 4016*58b9f456SAndroid Build Coastguard Worker return __first; 4017*58b9f456SAndroid Build Coastguard Worker} 4018*58b9f456SAndroid Build Coastguard Worker 4019*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4020*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4021*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4022*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_character_class(_ForwardIterator __first, 4023*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 4024*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml) 4025*58b9f456SAndroid Build Coastguard Worker{ 4026*58b9f456SAndroid Build Coastguard Worker // Found [: 4027*58b9f456SAndroid Build Coastguard Worker // This means :] must exist 4028*58b9f456SAndroid Build Coastguard Worker value_type _Colon_close[2] = {':', ']'}; 4029*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::search(__first, __last, _Colon_close, 4030*58b9f456SAndroid Build Coastguard Worker _Colon_close+2); 4031*58b9f456SAndroid Build Coastguard Worker if (__temp == __last) 4032*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 4033*58b9f456SAndroid Build Coastguard Worker // [__first, __temp) contains all text in [: ... :] 4034*58b9f456SAndroid Build Coastguard Worker typedef typename _Traits::char_class_type char_class_type; 4035*58b9f456SAndroid Build Coastguard Worker char_class_type __class_type = 4036*58b9f456SAndroid Build Coastguard Worker __traits_.lookup_classname(__first, __temp, __flags_ & icase); 4037*58b9f456SAndroid Build Coastguard Worker if (__class_type == 0) 4038*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_ctype>(); 4039*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(__class_type); 4040*58b9f456SAndroid Build Coastguard Worker __first = _VSTD::next(__temp, 2); 4041*58b9f456SAndroid Build Coastguard Worker return __first; 4042*58b9f456SAndroid Build Coastguard Worker} 4043*58b9f456SAndroid Build Coastguard Worker 4044*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4045*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4046*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4047*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_collating_symbol(_ForwardIterator __first, 4048*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 4049*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>& __col_sym) 4050*58b9f456SAndroid Build Coastguard Worker{ 4051*58b9f456SAndroid Build Coastguard Worker // Found [. 4052*58b9f456SAndroid Build Coastguard Worker // This means .] must exist 4053*58b9f456SAndroid Build Coastguard Worker value_type _Dot_close[2] = {'.', ']'}; 4054*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::search(__first, __last, _Dot_close, 4055*58b9f456SAndroid Build Coastguard Worker _Dot_close+2); 4056*58b9f456SAndroid Build Coastguard Worker if (__temp == __last) 4057*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_brack>(); 4058*58b9f456SAndroid Build Coastguard Worker // [__first, __temp) contains all text in [. ... .] 4059*58b9f456SAndroid Build Coastguard Worker __col_sym = __traits_.lookup_collatename(__first, __temp); 4060*58b9f456SAndroid Build Coastguard Worker switch (__col_sym.size()) 4061*58b9f456SAndroid Build Coastguard Worker { 4062*58b9f456SAndroid Build Coastguard Worker case 1: 4063*58b9f456SAndroid Build Coastguard Worker case 2: 4064*58b9f456SAndroid Build Coastguard Worker break; 4065*58b9f456SAndroid Build Coastguard Worker default: 4066*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_collate>(); 4067*58b9f456SAndroid Build Coastguard Worker } 4068*58b9f456SAndroid Build Coastguard Worker __first = _VSTD::next(__temp, 2); 4069*58b9f456SAndroid Build Coastguard Worker return __first; 4070*58b9f456SAndroid Build Coastguard Worker} 4071*58b9f456SAndroid Build Coastguard Worker 4072*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4073*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4074*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4075*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_DUP_COUNT(_ForwardIterator __first, 4076*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 4077*58b9f456SAndroid Build Coastguard Worker int& __c) 4078*58b9f456SAndroid Build Coastguard Worker{ 4079*58b9f456SAndroid Build Coastguard Worker if (__first != __last ) 4080*58b9f456SAndroid Build Coastguard Worker { 4081*58b9f456SAndroid Build Coastguard Worker int __val = __traits_.value(*__first, 10); 4082*58b9f456SAndroid Build Coastguard Worker if ( __val != -1 ) 4083*58b9f456SAndroid Build Coastguard Worker { 4084*58b9f456SAndroid Build Coastguard Worker __c = __val; 4085*58b9f456SAndroid Build Coastguard Worker for (++__first; 4086*58b9f456SAndroid Build Coastguard Worker __first != __last && ( __val = __traits_.value(*__first, 10)) != -1; 4087*58b9f456SAndroid Build Coastguard Worker ++__first) 4088*58b9f456SAndroid Build Coastguard Worker { 4089*58b9f456SAndroid Build Coastguard Worker if (__c >= std::numeric_limits<int>::max() / 10) 4090*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badbrace>(); 4091*58b9f456SAndroid Build Coastguard Worker __c *= 10; 4092*58b9f456SAndroid Build Coastguard Worker __c += __val; 4093*58b9f456SAndroid Build Coastguard Worker } 4094*58b9f456SAndroid Build Coastguard Worker } 4095*58b9f456SAndroid Build Coastguard Worker } 4096*58b9f456SAndroid Build Coastguard Worker return __first; 4097*58b9f456SAndroid Build Coastguard Worker} 4098*58b9f456SAndroid Build Coastguard Worker 4099*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4100*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4101*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4102*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_ecma_exp(_ForwardIterator __first, 4103*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4104*58b9f456SAndroid Build Coastguard Worker{ 4105*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sa = __end_; 4106*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_alternative(__first, __last); 4107*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 4108*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4109*58b9f456SAndroid Build Coastguard Worker __first = __temp; 4110*58b9f456SAndroid Build Coastguard Worker while (__first != __last && *__first == '|') 4111*58b9f456SAndroid Build Coastguard Worker { 4112*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sb = __end_; 4113*58b9f456SAndroid Build Coastguard Worker __temp = __parse_alternative(++__first, __last); 4114*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 4115*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4116*58b9f456SAndroid Build Coastguard Worker __push_alternation(__sa, __sb); 4117*58b9f456SAndroid Build Coastguard Worker __first = __temp; 4118*58b9f456SAndroid Build Coastguard Worker } 4119*58b9f456SAndroid Build Coastguard Worker return __first; 4120*58b9f456SAndroid Build Coastguard Worker} 4121*58b9f456SAndroid Build Coastguard Worker 4122*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4123*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4124*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4125*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_alternative(_ForwardIterator __first, 4126*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4127*58b9f456SAndroid Build Coastguard Worker{ 4128*58b9f456SAndroid Build Coastguard Worker while (true) 4129*58b9f456SAndroid Build Coastguard Worker { 4130*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_term(__first, __last); 4131*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 4132*58b9f456SAndroid Build Coastguard Worker break; 4133*58b9f456SAndroid Build Coastguard Worker __first = __temp; 4134*58b9f456SAndroid Build Coastguard Worker } 4135*58b9f456SAndroid Build Coastguard Worker return __first; 4136*58b9f456SAndroid Build Coastguard Worker} 4137*58b9f456SAndroid Build Coastguard Worker 4138*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4139*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4140*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4141*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_term(_ForwardIterator __first, 4142*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4143*58b9f456SAndroid Build Coastguard Worker{ 4144*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = __parse_assertion(__first, __last); 4145*58b9f456SAndroid Build Coastguard Worker if (__temp == __first) 4146*58b9f456SAndroid Build Coastguard Worker { 4147*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __e = __end_; 4148*58b9f456SAndroid Build Coastguard Worker unsigned __mexp_begin = __marked_count_; 4149*58b9f456SAndroid Build Coastguard Worker __temp = __parse_atom(__first, __last); 4150*58b9f456SAndroid Build Coastguard Worker if (__temp != __first) 4151*58b9f456SAndroid Build Coastguard Worker __first = __parse_ERE_dupl_symbol(__temp, __last, __e, 4152*58b9f456SAndroid Build Coastguard Worker __mexp_begin+1, __marked_count_+1); 4153*58b9f456SAndroid Build Coastguard Worker } 4154*58b9f456SAndroid Build Coastguard Worker else 4155*58b9f456SAndroid Build Coastguard Worker __first = __temp; 4156*58b9f456SAndroid Build Coastguard Worker return __first; 4157*58b9f456SAndroid Build Coastguard Worker} 4158*58b9f456SAndroid Build Coastguard Worker 4159*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4160*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4161*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4162*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_assertion(_ForwardIterator __first, 4163*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4164*58b9f456SAndroid Build Coastguard Worker{ 4165*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4166*58b9f456SAndroid Build Coastguard Worker { 4167*58b9f456SAndroid Build Coastguard Worker switch (*__first) 4168*58b9f456SAndroid Build Coastguard Worker { 4169*58b9f456SAndroid Build Coastguard Worker case '^': 4170*58b9f456SAndroid Build Coastguard Worker __push_l_anchor(); 4171*58b9f456SAndroid Build Coastguard Worker ++__first; 4172*58b9f456SAndroid Build Coastguard Worker break; 4173*58b9f456SAndroid Build Coastguard Worker case '$': 4174*58b9f456SAndroid Build Coastguard Worker __push_r_anchor(); 4175*58b9f456SAndroid Build Coastguard Worker ++__first; 4176*58b9f456SAndroid Build Coastguard Worker break; 4177*58b9f456SAndroid Build Coastguard Worker case '\\': 4178*58b9f456SAndroid Build Coastguard Worker { 4179*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 4180*58b9f456SAndroid Build Coastguard Worker if (__temp != __last) 4181*58b9f456SAndroid Build Coastguard Worker { 4182*58b9f456SAndroid Build Coastguard Worker if (*__temp == 'b') 4183*58b9f456SAndroid Build Coastguard Worker { 4184*58b9f456SAndroid Build Coastguard Worker __push_word_boundary(false); 4185*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 4186*58b9f456SAndroid Build Coastguard Worker } 4187*58b9f456SAndroid Build Coastguard Worker else if (*__temp == 'B') 4188*58b9f456SAndroid Build Coastguard Worker { 4189*58b9f456SAndroid Build Coastguard Worker __push_word_boundary(true); 4190*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 4191*58b9f456SAndroid Build Coastguard Worker } 4192*58b9f456SAndroid Build Coastguard Worker } 4193*58b9f456SAndroid Build Coastguard Worker } 4194*58b9f456SAndroid Build Coastguard Worker break; 4195*58b9f456SAndroid Build Coastguard Worker case '(': 4196*58b9f456SAndroid Build Coastguard Worker { 4197*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 4198*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__temp == '?') 4199*58b9f456SAndroid Build Coastguard Worker { 4200*58b9f456SAndroid Build Coastguard Worker if (++__temp != __last) 4201*58b9f456SAndroid Build Coastguard Worker { 4202*58b9f456SAndroid Build Coastguard Worker switch (*__temp) 4203*58b9f456SAndroid Build Coastguard Worker { 4204*58b9f456SAndroid Build Coastguard Worker case '=': 4205*58b9f456SAndroid Build Coastguard Worker { 4206*58b9f456SAndroid Build Coastguard Worker basic_regex __exp; 4207*58b9f456SAndroid Build Coastguard Worker __exp.__flags_ = __flags_; 4208*58b9f456SAndroid Build Coastguard Worker __temp = __exp.__parse(++__temp, __last); 4209*58b9f456SAndroid Build Coastguard Worker unsigned __mexp = __exp.__marked_count_; 4210*58b9f456SAndroid Build Coastguard Worker __push_lookahead(_VSTD::move(__exp), false, __marked_count_); 4211*58b9f456SAndroid Build Coastguard Worker __marked_count_ += __mexp; 4212*58b9f456SAndroid Build Coastguard Worker if (__temp == __last || *__temp != ')') 4213*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 4214*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 4215*58b9f456SAndroid Build Coastguard Worker } 4216*58b9f456SAndroid Build Coastguard Worker break; 4217*58b9f456SAndroid Build Coastguard Worker case '!': 4218*58b9f456SAndroid Build Coastguard Worker { 4219*58b9f456SAndroid Build Coastguard Worker basic_regex __exp; 4220*58b9f456SAndroid Build Coastguard Worker __exp.__flags_ = __flags_; 4221*58b9f456SAndroid Build Coastguard Worker __temp = __exp.__parse(++__temp, __last); 4222*58b9f456SAndroid Build Coastguard Worker unsigned __mexp = __exp.__marked_count_; 4223*58b9f456SAndroid Build Coastguard Worker __push_lookahead(_VSTD::move(__exp), true, __marked_count_); 4224*58b9f456SAndroid Build Coastguard Worker __marked_count_ += __mexp; 4225*58b9f456SAndroid Build Coastguard Worker if (__temp == __last || *__temp != ')') 4226*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 4227*58b9f456SAndroid Build Coastguard Worker __first = ++__temp; 4228*58b9f456SAndroid Build Coastguard Worker } 4229*58b9f456SAndroid Build Coastguard Worker break; 4230*58b9f456SAndroid Build Coastguard Worker } 4231*58b9f456SAndroid Build Coastguard Worker } 4232*58b9f456SAndroid Build Coastguard Worker } 4233*58b9f456SAndroid Build Coastguard Worker } 4234*58b9f456SAndroid Build Coastguard Worker break; 4235*58b9f456SAndroid Build Coastguard Worker } 4236*58b9f456SAndroid Build Coastguard Worker } 4237*58b9f456SAndroid Build Coastguard Worker return __first; 4238*58b9f456SAndroid Build Coastguard Worker} 4239*58b9f456SAndroid Build Coastguard Worker 4240*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4241*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4242*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4243*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_atom(_ForwardIterator __first, 4244*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4245*58b9f456SAndroid Build Coastguard Worker{ 4246*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4247*58b9f456SAndroid Build Coastguard Worker { 4248*58b9f456SAndroid Build Coastguard Worker switch (*__first) 4249*58b9f456SAndroid Build Coastguard Worker { 4250*58b9f456SAndroid Build Coastguard Worker case '.': 4251*58b9f456SAndroid Build Coastguard Worker __push_match_any_but_newline(); 4252*58b9f456SAndroid Build Coastguard Worker ++__first; 4253*58b9f456SAndroid Build Coastguard Worker break; 4254*58b9f456SAndroid Build Coastguard Worker case '\\': 4255*58b9f456SAndroid Build Coastguard Worker __first = __parse_atom_escape(__first, __last); 4256*58b9f456SAndroid Build Coastguard Worker break; 4257*58b9f456SAndroid Build Coastguard Worker case '[': 4258*58b9f456SAndroid Build Coastguard Worker __first = __parse_bracket_expression(__first, __last); 4259*58b9f456SAndroid Build Coastguard Worker break; 4260*58b9f456SAndroid Build Coastguard Worker case '(': 4261*58b9f456SAndroid Build Coastguard Worker { 4262*58b9f456SAndroid Build Coastguard Worker ++__first; 4263*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 4264*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 4265*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __temp = _VSTD::next(__first); 4266*58b9f456SAndroid Build Coastguard Worker if (__temp != __last && *__first == '?' && *__temp == ':') 4267*58b9f456SAndroid Build Coastguard Worker { 4268*58b9f456SAndroid Build Coastguard Worker ++__open_count_; 4269*58b9f456SAndroid Build Coastguard Worker __first = __parse_ecma_exp(++__temp, __last); 4270*58b9f456SAndroid Build Coastguard Worker if (__first == __last || *__first != ')') 4271*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 4272*58b9f456SAndroid Build Coastguard Worker --__open_count_; 4273*58b9f456SAndroid Build Coastguard Worker ++__first; 4274*58b9f456SAndroid Build Coastguard Worker } 4275*58b9f456SAndroid Build Coastguard Worker else 4276*58b9f456SAndroid Build Coastguard Worker { 4277*58b9f456SAndroid Build Coastguard Worker __push_begin_marked_subexpression(); 4278*58b9f456SAndroid Build Coastguard Worker unsigned __temp_count = __marked_count_; 4279*58b9f456SAndroid Build Coastguard Worker ++__open_count_; 4280*58b9f456SAndroid Build Coastguard Worker __first = __parse_ecma_exp(__first, __last); 4281*58b9f456SAndroid Build Coastguard Worker if (__first == __last || *__first != ')') 4282*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_paren>(); 4283*58b9f456SAndroid Build Coastguard Worker __push_end_marked_subexpression(__temp_count); 4284*58b9f456SAndroid Build Coastguard Worker --__open_count_; 4285*58b9f456SAndroid Build Coastguard Worker ++__first; 4286*58b9f456SAndroid Build Coastguard Worker } 4287*58b9f456SAndroid Build Coastguard Worker } 4288*58b9f456SAndroid Build Coastguard Worker break; 4289*58b9f456SAndroid Build Coastguard Worker case '*': 4290*58b9f456SAndroid Build Coastguard Worker case '+': 4291*58b9f456SAndroid Build Coastguard Worker case '?': 4292*58b9f456SAndroid Build Coastguard Worker case '{': 4293*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_badrepeat>(); 4294*58b9f456SAndroid Build Coastguard Worker break; 4295*58b9f456SAndroid Build Coastguard Worker default: 4296*58b9f456SAndroid Build Coastguard Worker __first = __parse_pattern_character(__first, __last); 4297*58b9f456SAndroid Build Coastguard Worker break; 4298*58b9f456SAndroid Build Coastguard Worker } 4299*58b9f456SAndroid Build Coastguard Worker } 4300*58b9f456SAndroid Build Coastguard Worker return __first; 4301*58b9f456SAndroid Build Coastguard Worker} 4302*58b9f456SAndroid Build Coastguard Worker 4303*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4304*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4305*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4306*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_atom_escape(_ForwardIterator __first, 4307*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4308*58b9f456SAndroid Build Coastguard Worker{ 4309*58b9f456SAndroid Build Coastguard Worker if (__first != __last && *__first == '\\') 4310*58b9f456SAndroid Build Coastguard Worker { 4311*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __t1 = _VSTD::next(__first); 4312*58b9f456SAndroid Build Coastguard Worker if (__t1 == __last) 4313*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4314*58b9f456SAndroid Build Coastguard Worker 4315*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __t2 = __parse_decimal_escape(__t1, __last); 4316*58b9f456SAndroid Build Coastguard Worker if (__t2 != __t1) 4317*58b9f456SAndroid Build Coastguard Worker __first = __t2; 4318*58b9f456SAndroid Build Coastguard Worker else 4319*58b9f456SAndroid Build Coastguard Worker { 4320*58b9f456SAndroid Build Coastguard Worker __t2 = __parse_character_class_escape(__t1, __last); 4321*58b9f456SAndroid Build Coastguard Worker if (__t2 != __t1) 4322*58b9f456SAndroid Build Coastguard Worker __first = __t2; 4323*58b9f456SAndroid Build Coastguard Worker else 4324*58b9f456SAndroid Build Coastguard Worker { 4325*58b9f456SAndroid Build Coastguard Worker __t2 = __parse_character_escape(__t1, __last); 4326*58b9f456SAndroid Build Coastguard Worker if (__t2 != __t1) 4327*58b9f456SAndroid Build Coastguard Worker __first = __t2; 4328*58b9f456SAndroid Build Coastguard Worker } 4329*58b9f456SAndroid Build Coastguard Worker } 4330*58b9f456SAndroid Build Coastguard Worker } 4331*58b9f456SAndroid Build Coastguard Worker return __first; 4332*58b9f456SAndroid Build Coastguard Worker} 4333*58b9f456SAndroid Build Coastguard Worker 4334*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4335*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4336*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4337*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_decimal_escape(_ForwardIterator __first, 4338*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4339*58b9f456SAndroid Build Coastguard Worker{ 4340*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4341*58b9f456SAndroid Build Coastguard Worker { 4342*58b9f456SAndroid Build Coastguard Worker if (*__first == '0') 4343*58b9f456SAndroid Build Coastguard Worker { 4344*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT()); 4345*58b9f456SAndroid Build Coastguard Worker ++__first; 4346*58b9f456SAndroid Build Coastguard Worker } 4347*58b9f456SAndroid Build Coastguard Worker else if ('1' <= *__first && *__first <= '9') 4348*58b9f456SAndroid Build Coastguard Worker { 4349*58b9f456SAndroid Build Coastguard Worker unsigned __v = *__first - '0'; 4350*58b9f456SAndroid Build Coastguard Worker for (++__first; 4351*58b9f456SAndroid Build Coastguard Worker __first != __last && '0' <= *__first && *__first <= '9'; ++__first) 4352*58b9f456SAndroid Build Coastguard Worker { 4353*58b9f456SAndroid Build Coastguard Worker if (__v >= std::numeric_limits<unsigned>::max() / 10) 4354*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_backref>(); 4355*58b9f456SAndroid Build Coastguard Worker __v = 10 * __v + *__first - '0'; 4356*58b9f456SAndroid Build Coastguard Worker } 4357*58b9f456SAndroid Build Coastguard Worker if (__v == 0 || __v > mark_count()) 4358*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_backref>(); 4359*58b9f456SAndroid Build Coastguard Worker __push_back_ref(__v); 4360*58b9f456SAndroid Build Coastguard Worker } 4361*58b9f456SAndroid Build Coastguard Worker } 4362*58b9f456SAndroid Build Coastguard Worker return __first; 4363*58b9f456SAndroid Build Coastguard Worker} 4364*58b9f456SAndroid Build Coastguard Worker 4365*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4366*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4367*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4368*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_character_class_escape(_ForwardIterator __first, 4369*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4370*58b9f456SAndroid Build Coastguard Worker{ 4371*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4372*58b9f456SAndroid Build Coastguard Worker { 4373*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __ml; 4374*58b9f456SAndroid Build Coastguard Worker switch (*__first) 4375*58b9f456SAndroid Build Coastguard Worker { 4376*58b9f456SAndroid Build Coastguard Worker case 'd': 4377*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(false); 4378*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::digit); 4379*58b9f456SAndroid Build Coastguard Worker ++__first; 4380*58b9f456SAndroid Build Coastguard Worker break; 4381*58b9f456SAndroid Build Coastguard Worker case 'D': 4382*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(true); 4383*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::digit); 4384*58b9f456SAndroid Build Coastguard Worker ++__first; 4385*58b9f456SAndroid Build Coastguard Worker break; 4386*58b9f456SAndroid Build Coastguard Worker case 's': 4387*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(false); 4388*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::space); 4389*58b9f456SAndroid Build Coastguard Worker ++__first; 4390*58b9f456SAndroid Build Coastguard Worker break; 4391*58b9f456SAndroid Build Coastguard Worker case 'S': 4392*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(true); 4393*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::space); 4394*58b9f456SAndroid Build Coastguard Worker ++__first; 4395*58b9f456SAndroid Build Coastguard Worker break; 4396*58b9f456SAndroid Build Coastguard Worker case 'w': 4397*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(false); 4398*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::alnum); 4399*58b9f456SAndroid Build Coastguard Worker __ml->__add_char('_'); 4400*58b9f456SAndroid Build Coastguard Worker ++__first; 4401*58b9f456SAndroid Build Coastguard Worker break; 4402*58b9f456SAndroid Build Coastguard Worker case 'W': 4403*58b9f456SAndroid Build Coastguard Worker __ml = __start_matching_list(true); 4404*58b9f456SAndroid Build Coastguard Worker __ml->__add_class(ctype_base::alnum); 4405*58b9f456SAndroid Build Coastguard Worker __ml->__add_char('_'); 4406*58b9f456SAndroid Build Coastguard Worker ++__first; 4407*58b9f456SAndroid Build Coastguard Worker break; 4408*58b9f456SAndroid Build Coastguard Worker } 4409*58b9f456SAndroid Build Coastguard Worker } 4410*58b9f456SAndroid Build Coastguard Worker return __first; 4411*58b9f456SAndroid Build Coastguard Worker} 4412*58b9f456SAndroid Build Coastguard Worker 4413*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4414*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4415*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4416*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_character_escape(_ForwardIterator __first, 4417*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last, 4418*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT>* __str) 4419*58b9f456SAndroid Build Coastguard Worker{ 4420*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4421*58b9f456SAndroid Build Coastguard Worker { 4422*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __t; 4423*58b9f456SAndroid Build Coastguard Worker unsigned __sum = 0; 4424*58b9f456SAndroid Build Coastguard Worker int __hd; 4425*58b9f456SAndroid Build Coastguard Worker switch (*__first) 4426*58b9f456SAndroid Build Coastguard Worker { 4427*58b9f456SAndroid Build Coastguard Worker case 'f': 4428*58b9f456SAndroid Build Coastguard Worker if (__str) 4429*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xC); 4430*58b9f456SAndroid Build Coastguard Worker else 4431*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xC)); 4432*58b9f456SAndroid Build Coastguard Worker ++__first; 4433*58b9f456SAndroid Build Coastguard Worker break; 4434*58b9f456SAndroid Build Coastguard Worker case 'n': 4435*58b9f456SAndroid Build Coastguard Worker if (__str) 4436*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xA); 4437*58b9f456SAndroid Build Coastguard Worker else 4438*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xA)); 4439*58b9f456SAndroid Build Coastguard Worker ++__first; 4440*58b9f456SAndroid Build Coastguard Worker break; 4441*58b9f456SAndroid Build Coastguard Worker case 'r': 4442*58b9f456SAndroid Build Coastguard Worker if (__str) 4443*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xD); 4444*58b9f456SAndroid Build Coastguard Worker else 4445*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xD)); 4446*58b9f456SAndroid Build Coastguard Worker ++__first; 4447*58b9f456SAndroid Build Coastguard Worker break; 4448*58b9f456SAndroid Build Coastguard Worker case 't': 4449*58b9f456SAndroid Build Coastguard Worker if (__str) 4450*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0x9); 4451*58b9f456SAndroid Build Coastguard Worker else 4452*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0x9)); 4453*58b9f456SAndroid Build Coastguard Worker ++__first; 4454*58b9f456SAndroid Build Coastguard Worker break; 4455*58b9f456SAndroid Build Coastguard Worker case 'v': 4456*58b9f456SAndroid Build Coastguard Worker if (__str) 4457*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0xB); 4458*58b9f456SAndroid Build Coastguard Worker else 4459*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0xB)); 4460*58b9f456SAndroid Build Coastguard Worker ++__first; 4461*58b9f456SAndroid Build Coastguard Worker break; 4462*58b9f456SAndroid Build Coastguard Worker case 'c': 4463*58b9f456SAndroid Build Coastguard Worker if ((__t = _VSTD::next(__first)) != __last) 4464*58b9f456SAndroid Build Coastguard Worker { 4465*58b9f456SAndroid Build Coastguard Worker if (('A' <= *__t && *__t <= 'Z') || 4466*58b9f456SAndroid Build Coastguard Worker ('a' <= *__t && *__t <= 'z')) 4467*58b9f456SAndroid Build Coastguard Worker { 4468*58b9f456SAndroid Build Coastguard Worker if (__str) 4469*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(*__t % 32); 4470*58b9f456SAndroid Build Coastguard Worker else 4471*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(*__t % 32)); 4472*58b9f456SAndroid Build Coastguard Worker __first = ++__t; 4473*58b9f456SAndroid Build Coastguard Worker } 4474*58b9f456SAndroid Build Coastguard Worker else 4475*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4476*58b9f456SAndroid Build Coastguard Worker } 4477*58b9f456SAndroid Build Coastguard Worker else 4478*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4479*58b9f456SAndroid Build Coastguard Worker break; 4480*58b9f456SAndroid Build Coastguard Worker case 'u': 4481*58b9f456SAndroid Build Coastguard Worker ++__first; 4482*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 4483*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4484*58b9f456SAndroid Build Coastguard Worker __hd = __traits_.value(*__first, 16); 4485*58b9f456SAndroid Build Coastguard Worker if (__hd == -1) 4486*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4487*58b9f456SAndroid Build Coastguard Worker __sum = 16 * __sum + static_cast<unsigned>(__hd); 4488*58b9f456SAndroid Build Coastguard Worker ++__first; 4489*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 4490*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4491*58b9f456SAndroid Build Coastguard Worker __hd = __traits_.value(*__first, 16); 4492*58b9f456SAndroid Build Coastguard Worker if (__hd == -1) 4493*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4494*58b9f456SAndroid Build Coastguard Worker __sum = 16 * __sum + static_cast<unsigned>(__hd); 4495*58b9f456SAndroid Build Coastguard Worker // drop through 4496*58b9f456SAndroid Build Coastguard Worker case 'x': 4497*58b9f456SAndroid Build Coastguard Worker ++__first; 4498*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 4499*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4500*58b9f456SAndroid Build Coastguard Worker __hd = __traits_.value(*__first, 16); 4501*58b9f456SAndroid Build Coastguard Worker if (__hd == -1) 4502*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4503*58b9f456SAndroid Build Coastguard Worker __sum = 16 * __sum + static_cast<unsigned>(__hd); 4504*58b9f456SAndroid Build Coastguard Worker ++__first; 4505*58b9f456SAndroid Build Coastguard Worker if (__first == __last) 4506*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4507*58b9f456SAndroid Build Coastguard Worker __hd = __traits_.value(*__first, 16); 4508*58b9f456SAndroid Build Coastguard Worker if (__hd == -1) 4509*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4510*58b9f456SAndroid Build Coastguard Worker __sum = 16 * __sum + static_cast<unsigned>(__hd); 4511*58b9f456SAndroid Build Coastguard Worker if (__str) 4512*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(__sum); 4513*58b9f456SAndroid Build Coastguard Worker else 4514*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(__sum)); 4515*58b9f456SAndroid Build Coastguard Worker ++__first; 4516*58b9f456SAndroid Build Coastguard Worker break; 4517*58b9f456SAndroid Build Coastguard Worker case '0': 4518*58b9f456SAndroid Build Coastguard Worker if (__str) 4519*58b9f456SAndroid Build Coastguard Worker *__str = _CharT(0); 4520*58b9f456SAndroid Build Coastguard Worker else 4521*58b9f456SAndroid Build Coastguard Worker __push_char(_CharT(0)); 4522*58b9f456SAndroid Build Coastguard Worker ++__first; 4523*58b9f456SAndroid Build Coastguard Worker break; 4524*58b9f456SAndroid Build Coastguard Worker default: 4525*58b9f456SAndroid Build Coastguard Worker if (*__first != '_' && !__traits_.isctype(*__first, ctype_base::alnum)) 4526*58b9f456SAndroid Build Coastguard Worker { 4527*58b9f456SAndroid Build Coastguard Worker if (__str) 4528*58b9f456SAndroid Build Coastguard Worker *__str = *__first; 4529*58b9f456SAndroid Build Coastguard Worker else 4530*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 4531*58b9f456SAndroid Build Coastguard Worker ++__first; 4532*58b9f456SAndroid Build Coastguard Worker } 4533*58b9f456SAndroid Build Coastguard Worker else 4534*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 4535*58b9f456SAndroid Build Coastguard Worker break; 4536*58b9f456SAndroid Build Coastguard Worker } 4537*58b9f456SAndroid Build Coastguard Worker } 4538*58b9f456SAndroid Build Coastguard Worker return __first; 4539*58b9f456SAndroid Build Coastguard Worker} 4540*58b9f456SAndroid Build Coastguard Worker 4541*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4542*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4543*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4544*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_pattern_character(_ForwardIterator __first, 4545*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4546*58b9f456SAndroid Build Coastguard Worker{ 4547*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4548*58b9f456SAndroid Build Coastguard Worker { 4549*58b9f456SAndroid Build Coastguard Worker switch (*__first) 4550*58b9f456SAndroid Build Coastguard Worker { 4551*58b9f456SAndroid Build Coastguard Worker case '^': 4552*58b9f456SAndroid Build Coastguard Worker case '$': 4553*58b9f456SAndroid Build Coastguard Worker case '\\': 4554*58b9f456SAndroid Build Coastguard Worker case '.': 4555*58b9f456SAndroid Build Coastguard Worker case '*': 4556*58b9f456SAndroid Build Coastguard Worker case '+': 4557*58b9f456SAndroid Build Coastguard Worker case '?': 4558*58b9f456SAndroid Build Coastguard Worker case '(': 4559*58b9f456SAndroid Build Coastguard Worker case ')': 4560*58b9f456SAndroid Build Coastguard Worker case '[': 4561*58b9f456SAndroid Build Coastguard Worker case ']': 4562*58b9f456SAndroid Build Coastguard Worker case '{': 4563*58b9f456SAndroid Build Coastguard Worker case '}': 4564*58b9f456SAndroid Build Coastguard Worker case '|': 4565*58b9f456SAndroid Build Coastguard Worker break; 4566*58b9f456SAndroid Build Coastguard Worker default: 4567*58b9f456SAndroid Build Coastguard Worker __push_char(*__first); 4568*58b9f456SAndroid Build Coastguard Worker ++__first; 4569*58b9f456SAndroid Build Coastguard Worker break; 4570*58b9f456SAndroid Build Coastguard Worker } 4571*58b9f456SAndroid Build Coastguard Worker } 4572*58b9f456SAndroid Build Coastguard Worker return __first; 4573*58b9f456SAndroid Build Coastguard Worker} 4574*58b9f456SAndroid Build Coastguard Worker 4575*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4576*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4577*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4578*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_grep(_ForwardIterator __first, 4579*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4580*58b9f456SAndroid Build Coastguard Worker{ 4581*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sa = __end_; 4582*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __t1 = _VSTD::find(__first, __last, _CharT('\n')); 4583*58b9f456SAndroid Build Coastguard Worker if (__t1 != __first) 4584*58b9f456SAndroid Build Coastguard Worker __parse_basic_reg_exp(__first, __t1); 4585*58b9f456SAndroid Build Coastguard Worker else 4586*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4587*58b9f456SAndroid Build Coastguard Worker __first = __t1; 4588*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4589*58b9f456SAndroid Build Coastguard Worker ++__first; 4590*58b9f456SAndroid Build Coastguard Worker while (__first != __last) 4591*58b9f456SAndroid Build Coastguard Worker { 4592*58b9f456SAndroid Build Coastguard Worker __t1 = _VSTD::find(__first, __last, _CharT('\n')); 4593*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sb = __end_; 4594*58b9f456SAndroid Build Coastguard Worker if (__t1 != __first) 4595*58b9f456SAndroid Build Coastguard Worker __parse_basic_reg_exp(__first, __t1); 4596*58b9f456SAndroid Build Coastguard Worker else 4597*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4598*58b9f456SAndroid Build Coastguard Worker __push_alternation(__sa, __sb); 4599*58b9f456SAndroid Build Coastguard Worker __first = __t1; 4600*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4601*58b9f456SAndroid Build Coastguard Worker ++__first; 4602*58b9f456SAndroid Build Coastguard Worker } 4603*58b9f456SAndroid Build Coastguard Worker return __first; 4604*58b9f456SAndroid Build Coastguard Worker} 4605*58b9f456SAndroid Build Coastguard Worker 4606*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4607*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 4608*58b9f456SAndroid Build Coastguard Worker_ForwardIterator 4609*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__parse_egrep(_ForwardIterator __first, 4610*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __last) 4611*58b9f456SAndroid Build Coastguard Worker{ 4612*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sa = __end_; 4613*58b9f456SAndroid Build Coastguard Worker _ForwardIterator __t1 = _VSTD::find(__first, __last, _CharT('\n')); 4614*58b9f456SAndroid Build Coastguard Worker if (__t1 != __first) 4615*58b9f456SAndroid Build Coastguard Worker __parse_extended_reg_exp(__first, __t1); 4616*58b9f456SAndroid Build Coastguard Worker else 4617*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4618*58b9f456SAndroid Build Coastguard Worker __first = __t1; 4619*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4620*58b9f456SAndroid Build Coastguard Worker ++__first; 4621*58b9f456SAndroid Build Coastguard Worker while (__first != __last) 4622*58b9f456SAndroid Build Coastguard Worker { 4623*58b9f456SAndroid Build Coastguard Worker __t1 = _VSTD::find(__first, __last, _CharT('\n')); 4624*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __sb = __end_; 4625*58b9f456SAndroid Build Coastguard Worker if (__t1 != __first) 4626*58b9f456SAndroid Build Coastguard Worker __parse_extended_reg_exp(__first, __t1); 4627*58b9f456SAndroid Build Coastguard Worker else 4628*58b9f456SAndroid Build Coastguard Worker __push_empty(); 4629*58b9f456SAndroid Build Coastguard Worker __push_alternation(__sa, __sb); 4630*58b9f456SAndroid Build Coastguard Worker __first = __t1; 4631*58b9f456SAndroid Build Coastguard Worker if (__first != __last) 4632*58b9f456SAndroid Build Coastguard Worker ++__first; 4633*58b9f456SAndroid Build Coastguard Worker } 4634*58b9f456SAndroid Build Coastguard Worker return __first; 4635*58b9f456SAndroid Build Coastguard Worker} 4636*58b9f456SAndroid Build Coastguard Worker 4637*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4638*58b9f456SAndroid Build Coastguard Workervoid 4639*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_loop(size_t __min, size_t __max, 4640*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __s, size_t __mexp_begin, size_t __mexp_end, 4641*58b9f456SAndroid Build Coastguard Worker bool __greedy) 4642*58b9f456SAndroid Build Coastguard Worker{ 4643*58b9f456SAndroid Build Coastguard Worker unique_ptr<__empty_state<_CharT> > __e1(new __empty_state<_CharT>(__end_->first())); 4644*58b9f456SAndroid Build Coastguard Worker __end_->first() = nullptr; 4645*58b9f456SAndroid Build Coastguard Worker unique_ptr<__loop<_CharT> > __e2(new __loop<_CharT>(__loop_count_, 4646*58b9f456SAndroid Build Coastguard Worker __s->first(), __e1.get(), __mexp_begin, __mexp_end, __greedy, 4647*58b9f456SAndroid Build Coastguard Worker __min, __max)); 4648*58b9f456SAndroid Build Coastguard Worker __s->first() = nullptr; 4649*58b9f456SAndroid Build Coastguard Worker __e1.release(); 4650*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __repeat_one_loop<_CharT>(__e2.get()); 4651*58b9f456SAndroid Build Coastguard Worker __end_ = __e2->second(); 4652*58b9f456SAndroid Build Coastguard Worker __s->first() = __e2.release(); 4653*58b9f456SAndroid Build Coastguard Worker ++__loop_count_; 4654*58b9f456SAndroid Build Coastguard Worker} 4655*58b9f456SAndroid Build Coastguard Worker 4656*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4657*58b9f456SAndroid Build Coastguard Workervoid 4658*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_char(value_type __c) 4659*58b9f456SAndroid Build Coastguard Worker{ 4660*58b9f456SAndroid Build Coastguard Worker if (flags() & icase) 4661*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __match_char_icase<_CharT, _Traits> 4662*58b9f456SAndroid Build Coastguard Worker (__traits_, __c, __end_->first()); 4663*58b9f456SAndroid Build Coastguard Worker else if (flags() & collate) 4664*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __match_char_collate<_CharT, _Traits> 4665*58b9f456SAndroid Build Coastguard Worker (__traits_, __c, __end_->first()); 4666*58b9f456SAndroid Build Coastguard Worker else 4667*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __match_char<_CharT>(__c, __end_->first()); 4668*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4669*58b9f456SAndroid Build Coastguard Worker} 4670*58b9f456SAndroid Build Coastguard Worker 4671*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4672*58b9f456SAndroid Build Coastguard Workervoid 4673*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_begin_marked_subexpression() 4674*58b9f456SAndroid Build Coastguard Worker{ 4675*58b9f456SAndroid Build Coastguard Worker if (!(__flags_ & nosubs)) 4676*58b9f456SAndroid Build Coastguard Worker { 4677*58b9f456SAndroid Build Coastguard Worker __end_->first() = 4678*58b9f456SAndroid Build Coastguard Worker new __begin_marked_subexpression<_CharT>(++__marked_count_, 4679*58b9f456SAndroid Build Coastguard Worker __end_->first()); 4680*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4681*58b9f456SAndroid Build Coastguard Worker } 4682*58b9f456SAndroid Build Coastguard Worker} 4683*58b9f456SAndroid Build Coastguard Worker 4684*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4685*58b9f456SAndroid Build Coastguard Workervoid 4686*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_end_marked_subexpression(unsigned __sub) 4687*58b9f456SAndroid Build Coastguard Worker{ 4688*58b9f456SAndroid Build Coastguard Worker if (!(__flags_ & nosubs)) 4689*58b9f456SAndroid Build Coastguard Worker { 4690*58b9f456SAndroid Build Coastguard Worker __end_->first() = 4691*58b9f456SAndroid Build Coastguard Worker new __end_marked_subexpression<_CharT>(__sub, __end_->first()); 4692*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4693*58b9f456SAndroid Build Coastguard Worker } 4694*58b9f456SAndroid Build Coastguard Worker} 4695*58b9f456SAndroid Build Coastguard Worker 4696*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4697*58b9f456SAndroid Build Coastguard Workervoid 4698*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_l_anchor() 4699*58b9f456SAndroid Build Coastguard Worker{ 4700*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __l_anchor<_CharT>(__end_->first()); 4701*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4702*58b9f456SAndroid Build Coastguard Worker} 4703*58b9f456SAndroid Build Coastguard Worker 4704*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4705*58b9f456SAndroid Build Coastguard Workervoid 4706*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_r_anchor() 4707*58b9f456SAndroid Build Coastguard Worker{ 4708*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __r_anchor<_CharT>(__end_->first()); 4709*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4710*58b9f456SAndroid Build Coastguard Worker} 4711*58b9f456SAndroid Build Coastguard Worker 4712*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4713*58b9f456SAndroid Build Coastguard Workervoid 4714*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_match_any() 4715*58b9f456SAndroid Build Coastguard Worker{ 4716*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __match_any<_CharT>(__end_->first()); 4717*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4718*58b9f456SAndroid Build Coastguard Worker} 4719*58b9f456SAndroid Build Coastguard Worker 4720*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4721*58b9f456SAndroid Build Coastguard Workervoid 4722*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_match_any_but_newline() 4723*58b9f456SAndroid Build Coastguard Worker{ 4724*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __match_any_but_newline<_CharT>(__end_->first()); 4725*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4726*58b9f456SAndroid Build Coastguard Worker} 4727*58b9f456SAndroid Build Coastguard Worker 4728*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4729*58b9f456SAndroid Build Coastguard Workervoid 4730*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_empty() 4731*58b9f456SAndroid Build Coastguard Worker{ 4732*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __empty_state<_CharT>(__end_->first()); 4733*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4734*58b9f456SAndroid Build Coastguard Worker} 4735*58b9f456SAndroid Build Coastguard Worker 4736*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4737*58b9f456SAndroid Build Coastguard Workervoid 4738*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_word_boundary(bool __invert) 4739*58b9f456SAndroid Build Coastguard Worker{ 4740*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __word_boundary<_CharT, _Traits>(__traits_, __invert, 4741*58b9f456SAndroid Build Coastguard Worker __end_->first()); 4742*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4743*58b9f456SAndroid Build Coastguard Worker} 4744*58b9f456SAndroid Build Coastguard Worker 4745*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4746*58b9f456SAndroid Build Coastguard Workervoid 4747*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_back_ref(int __i) 4748*58b9f456SAndroid Build Coastguard Worker{ 4749*58b9f456SAndroid Build Coastguard Worker if (flags() & icase) 4750*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __back_ref_icase<_CharT, _Traits> 4751*58b9f456SAndroid Build Coastguard Worker (__traits_, __i, __end_->first()); 4752*58b9f456SAndroid Build Coastguard Worker else if (flags() & collate) 4753*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __back_ref_collate<_CharT, _Traits> 4754*58b9f456SAndroid Build Coastguard Worker (__traits_, __i, __end_->first()); 4755*58b9f456SAndroid Build Coastguard Worker else 4756*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __back_ref<_CharT>(__i, __end_->first()); 4757*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4758*58b9f456SAndroid Build Coastguard Worker} 4759*58b9f456SAndroid Build Coastguard Worker 4760*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4761*58b9f456SAndroid Build Coastguard Workervoid 4762*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_alternation(__owns_one_state<_CharT>* __sa, 4763*58b9f456SAndroid Build Coastguard Worker __owns_one_state<_CharT>* __ea) 4764*58b9f456SAndroid Build Coastguard Worker{ 4765*58b9f456SAndroid Build Coastguard Worker __sa->first() = new __alternate<_CharT>( 4766*58b9f456SAndroid Build Coastguard Worker static_cast<__owns_one_state<_CharT>*>(__sa->first()), 4767*58b9f456SAndroid Build Coastguard Worker static_cast<__owns_one_state<_CharT>*>(__ea->first())); 4768*58b9f456SAndroid Build Coastguard Worker __ea->first() = nullptr; 4769*58b9f456SAndroid Build Coastguard Worker __ea->first() = new __empty_state<_CharT>(__end_->first()); 4770*58b9f456SAndroid Build Coastguard Worker __end_->first() = nullptr; 4771*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __empty_non_own_state<_CharT>(__ea->first()); 4772*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__ea->first()); 4773*58b9f456SAndroid Build Coastguard Worker} 4774*58b9f456SAndroid Build Coastguard Worker 4775*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4776*58b9f456SAndroid Build Coastguard Worker__bracket_expression<_CharT, _Traits>* 4777*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__start_matching_list(bool __negate) 4778*58b9f456SAndroid Build Coastguard Worker{ 4779*58b9f456SAndroid Build Coastguard Worker __bracket_expression<_CharT, _Traits>* __r = 4780*58b9f456SAndroid Build Coastguard Worker new __bracket_expression<_CharT, _Traits>(__traits_, __end_->first(), 4781*58b9f456SAndroid Build Coastguard Worker __negate, __flags_ & icase, 4782*58b9f456SAndroid Build Coastguard Worker __flags_ & collate); 4783*58b9f456SAndroid Build Coastguard Worker __end_->first() = __r; 4784*58b9f456SAndroid Build Coastguard Worker __end_ = __r; 4785*58b9f456SAndroid Build Coastguard Worker return __r; 4786*58b9f456SAndroid Build Coastguard Worker} 4787*58b9f456SAndroid Build Coastguard Worker 4788*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 4789*58b9f456SAndroid Build Coastguard Workervoid 4790*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__push_lookahead(const basic_regex& __exp, 4791*58b9f456SAndroid Build Coastguard Worker bool __invert, 4792*58b9f456SAndroid Build Coastguard Worker unsigned __mexp) 4793*58b9f456SAndroid Build Coastguard Worker{ 4794*58b9f456SAndroid Build Coastguard Worker __end_->first() = new __lookahead<_CharT, _Traits>(__exp, __invert, 4795*58b9f456SAndroid Build Coastguard Worker __end_->first(), __mexp); 4796*58b9f456SAndroid Build Coastguard Worker __end_ = static_cast<__owns_one_state<_CharT>*>(__end_->first()); 4797*58b9f456SAndroid Build Coastguard Worker} 4798*58b9f456SAndroid Build Coastguard Worker 4799*58b9f456SAndroid Build Coastguard Workertypedef basic_regex<char> regex; 4800*58b9f456SAndroid Build Coastguard Workertypedef basic_regex<wchar_t> wregex; 4801*58b9f456SAndroid Build Coastguard Worker 4802*58b9f456SAndroid Build Coastguard Worker// sub_match 4803*58b9f456SAndroid Build Coastguard Worker 4804*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator> 4805*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS sub_match 4806*58b9f456SAndroid Build Coastguard Worker : public pair<_BidirectionalIterator, _BidirectionalIterator> 4807*58b9f456SAndroid Build Coastguard Worker{ 4808*58b9f456SAndroid Build Coastguard Workerpublic: 4809*58b9f456SAndroid Build Coastguard Worker typedef _BidirectionalIterator iterator; 4810*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<iterator>::value_type value_type; 4811*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<iterator>::difference_type difference_type; 4812*58b9f456SAndroid Build Coastguard Worker typedef basic_string<value_type> string_type; 4813*58b9f456SAndroid Build Coastguard Worker 4814*58b9f456SAndroid Build Coastguard Worker bool matched; 4815*58b9f456SAndroid Build Coastguard Worker 4816*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4817*58b9f456SAndroid Build Coastguard Worker _LIBCPP_CONSTEXPR sub_match() : matched() {} 4818*58b9f456SAndroid Build Coastguard Worker 4819*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4820*58b9f456SAndroid Build Coastguard Worker difference_type length() const 4821*58b9f456SAndroid Build Coastguard Worker {return matched ? _VSTD::distance(this->first, this->second) : 0;} 4822*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4823*58b9f456SAndroid Build Coastguard Worker string_type str() const 4824*58b9f456SAndroid Build Coastguard Worker {return matched ? string_type(this->first, this->second) : string_type();} 4825*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4826*58b9f456SAndroid Build Coastguard Worker operator string_type() const 4827*58b9f456SAndroid Build Coastguard Worker {return str();} 4828*58b9f456SAndroid Build Coastguard Worker 4829*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4830*58b9f456SAndroid Build Coastguard Worker int compare(const sub_match& __s) const 4831*58b9f456SAndroid Build Coastguard Worker {return str().compare(__s.str());} 4832*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4833*58b9f456SAndroid Build Coastguard Worker int compare(const string_type& __s) const 4834*58b9f456SAndroid Build Coastguard Worker {return str().compare(__s);} 4835*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 4836*58b9f456SAndroid Build Coastguard Worker int compare(const value_type* __s) const 4837*58b9f456SAndroid Build Coastguard Worker {return str().compare(__s);} 4838*58b9f456SAndroid Build Coastguard Worker}; 4839*58b9f456SAndroid Build Coastguard Worker 4840*58b9f456SAndroid Build Coastguard Workertypedef sub_match<const char*> csub_match; 4841*58b9f456SAndroid Build Coastguard Workertypedef sub_match<const wchar_t*> wcsub_match; 4842*58b9f456SAndroid Build Coastguard Workertypedef sub_match<string::const_iterator> ssub_match; 4843*58b9f456SAndroid Build Coastguard Workertypedef sub_match<wstring::const_iterator> wssub_match; 4844*58b9f456SAndroid Build Coastguard Worker 4845*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4846*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4847*58b9f456SAndroid Build Coastguard Workerbool 4848*58b9f456SAndroid Build Coastguard Workeroperator==(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4849*58b9f456SAndroid Build Coastguard Worker{ 4850*58b9f456SAndroid Build Coastguard Worker return __x.compare(__y) == 0; 4851*58b9f456SAndroid Build Coastguard Worker} 4852*58b9f456SAndroid Build Coastguard Worker 4853*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4854*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4855*58b9f456SAndroid Build Coastguard Workerbool 4856*58b9f456SAndroid Build Coastguard Workeroperator!=(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4857*58b9f456SAndroid Build Coastguard Worker{ 4858*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 4859*58b9f456SAndroid Build Coastguard Worker} 4860*58b9f456SAndroid Build Coastguard Worker 4861*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4862*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4863*58b9f456SAndroid Build Coastguard Workerbool 4864*58b9f456SAndroid Build Coastguard Workeroperator<(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4865*58b9f456SAndroid Build Coastguard Worker{ 4866*58b9f456SAndroid Build Coastguard Worker return __x.compare(__y) < 0; 4867*58b9f456SAndroid Build Coastguard Worker} 4868*58b9f456SAndroid Build Coastguard Worker 4869*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4870*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4871*58b9f456SAndroid Build Coastguard Workerbool 4872*58b9f456SAndroid Build Coastguard Workeroperator<=(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4873*58b9f456SAndroid Build Coastguard Worker{ 4874*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 4875*58b9f456SAndroid Build Coastguard Worker} 4876*58b9f456SAndroid Build Coastguard Worker 4877*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4878*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4879*58b9f456SAndroid Build Coastguard Workerbool 4880*58b9f456SAndroid Build Coastguard Workeroperator>=(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4881*58b9f456SAndroid Build Coastguard Worker{ 4882*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 4883*58b9f456SAndroid Build Coastguard Worker} 4884*58b9f456SAndroid Build Coastguard Worker 4885*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 4886*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4887*58b9f456SAndroid Build Coastguard Workerbool 4888*58b9f456SAndroid Build Coastguard Workeroperator>(const sub_match<_BiIter>& __x, const sub_match<_BiIter>& __y) 4889*58b9f456SAndroid Build Coastguard Worker{ 4890*58b9f456SAndroid Build Coastguard Worker return __y < __x; 4891*58b9f456SAndroid Build Coastguard Worker} 4892*58b9f456SAndroid Build Coastguard Worker 4893*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4894*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4895*58b9f456SAndroid Build Coastguard Workerbool 4896*58b9f456SAndroid Build Coastguard Workeroperator==(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4897*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4898*58b9f456SAndroid Build Coastguard Worker{ 4899*58b9f456SAndroid Build Coastguard Worker return __y.compare(typename sub_match<_BiIter>::string_type(__x.data(), __x.size())) == 0; 4900*58b9f456SAndroid Build Coastguard Worker} 4901*58b9f456SAndroid Build Coastguard Worker 4902*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4903*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4904*58b9f456SAndroid Build Coastguard Workerbool 4905*58b9f456SAndroid Build Coastguard Workeroperator!=(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4906*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4907*58b9f456SAndroid Build Coastguard Worker{ 4908*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 4909*58b9f456SAndroid Build Coastguard Worker} 4910*58b9f456SAndroid Build Coastguard Worker 4911*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4912*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4913*58b9f456SAndroid Build Coastguard Workerbool 4914*58b9f456SAndroid Build Coastguard Workeroperator<(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4915*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4916*58b9f456SAndroid Build Coastguard Worker{ 4917*58b9f456SAndroid Build Coastguard Worker return __y.compare(typename sub_match<_BiIter>::string_type(__x.data(), __x.size())) > 0; 4918*58b9f456SAndroid Build Coastguard Worker} 4919*58b9f456SAndroid Build Coastguard Worker 4920*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4921*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4922*58b9f456SAndroid Build Coastguard Workerbool 4923*58b9f456SAndroid Build Coastguard Workeroperator>(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4924*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4925*58b9f456SAndroid Build Coastguard Worker{ 4926*58b9f456SAndroid Build Coastguard Worker return __y < __x; 4927*58b9f456SAndroid Build Coastguard Worker} 4928*58b9f456SAndroid Build Coastguard Worker 4929*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4930*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4931*58b9f456SAndroid Build Coastguard Workerbool operator>=(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4932*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4933*58b9f456SAndroid Build Coastguard Worker{ 4934*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 4935*58b9f456SAndroid Build Coastguard Worker} 4936*58b9f456SAndroid Build Coastguard Worker 4937*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4938*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4939*58b9f456SAndroid Build Coastguard Workerbool 4940*58b9f456SAndroid Build Coastguard Workeroperator<=(const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __x, 4941*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 4942*58b9f456SAndroid Build Coastguard Worker{ 4943*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 4944*58b9f456SAndroid Build Coastguard Worker} 4945*58b9f456SAndroid Build Coastguard Worker 4946*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4947*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4948*58b9f456SAndroid Build Coastguard Workerbool 4949*58b9f456SAndroid Build Coastguard Workeroperator==(const sub_match<_BiIter>& __x, 4950*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4951*58b9f456SAndroid Build Coastguard Worker{ 4952*58b9f456SAndroid Build Coastguard Worker return __x.compare(typename sub_match<_BiIter>::string_type(__y.data(), __y.size())) == 0; 4953*58b9f456SAndroid Build Coastguard Worker} 4954*58b9f456SAndroid Build Coastguard Worker 4955*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4956*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4957*58b9f456SAndroid Build Coastguard Workerbool 4958*58b9f456SAndroid Build Coastguard Workeroperator!=(const sub_match<_BiIter>& __x, 4959*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4960*58b9f456SAndroid Build Coastguard Worker{ 4961*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 4962*58b9f456SAndroid Build Coastguard Worker} 4963*58b9f456SAndroid Build Coastguard Worker 4964*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4965*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4966*58b9f456SAndroid Build Coastguard Workerbool 4967*58b9f456SAndroid Build Coastguard Workeroperator<(const sub_match<_BiIter>& __x, 4968*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4969*58b9f456SAndroid Build Coastguard Worker{ 4970*58b9f456SAndroid Build Coastguard Worker return __x.compare(typename sub_match<_BiIter>::string_type(__y.data(), __y.size())) < 0; 4971*58b9f456SAndroid Build Coastguard Worker} 4972*58b9f456SAndroid Build Coastguard Worker 4973*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4974*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4975*58b9f456SAndroid Build Coastguard Workerbool operator>(const sub_match<_BiIter>& __x, 4976*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4977*58b9f456SAndroid Build Coastguard Worker{ 4978*58b9f456SAndroid Build Coastguard Worker return __y < __x; 4979*58b9f456SAndroid Build Coastguard Worker} 4980*58b9f456SAndroid Build Coastguard Worker 4981*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4982*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4983*58b9f456SAndroid Build Coastguard Workerbool 4984*58b9f456SAndroid Build Coastguard Workeroperator>=(const sub_match<_BiIter>& __x, 4985*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4986*58b9f456SAndroid Build Coastguard Worker{ 4987*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 4988*58b9f456SAndroid Build Coastguard Worker} 4989*58b9f456SAndroid Build Coastguard Worker 4990*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter, class _ST, class _SA> 4991*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4992*58b9f456SAndroid Build Coastguard Workerbool 4993*58b9f456SAndroid Build Coastguard Workeroperator<=(const sub_match<_BiIter>& __x, 4994*58b9f456SAndroid Build Coastguard Worker const basic_string<typename iterator_traits<_BiIter>::value_type, _ST, _SA>& __y) 4995*58b9f456SAndroid Build Coastguard Worker{ 4996*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 4997*58b9f456SAndroid Build Coastguard Worker} 4998*58b9f456SAndroid Build Coastguard Worker 4999*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5000*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5001*58b9f456SAndroid Build Coastguard Workerbool 5002*58b9f456SAndroid Build Coastguard Workeroperator==(typename iterator_traits<_BiIter>::value_type const* __x, 5003*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5004*58b9f456SAndroid Build Coastguard Worker{ 5005*58b9f456SAndroid Build Coastguard Worker return __y.compare(__x) == 0; 5006*58b9f456SAndroid Build Coastguard Worker} 5007*58b9f456SAndroid Build Coastguard Worker 5008*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5009*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5010*58b9f456SAndroid Build Coastguard Workerbool 5011*58b9f456SAndroid Build Coastguard Workeroperator!=(typename iterator_traits<_BiIter>::value_type const* __x, 5012*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5013*58b9f456SAndroid Build Coastguard Worker{ 5014*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 5015*58b9f456SAndroid Build Coastguard Worker} 5016*58b9f456SAndroid Build Coastguard Worker 5017*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5018*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5019*58b9f456SAndroid Build Coastguard Workerbool 5020*58b9f456SAndroid Build Coastguard Workeroperator<(typename iterator_traits<_BiIter>::value_type const* __x, 5021*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5022*58b9f456SAndroid Build Coastguard Worker{ 5023*58b9f456SAndroid Build Coastguard Worker return __y.compare(__x) > 0; 5024*58b9f456SAndroid Build Coastguard Worker} 5025*58b9f456SAndroid Build Coastguard Worker 5026*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5027*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5028*58b9f456SAndroid Build Coastguard Workerbool 5029*58b9f456SAndroid Build Coastguard Workeroperator>(typename iterator_traits<_BiIter>::value_type const* __x, 5030*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5031*58b9f456SAndroid Build Coastguard Worker{ 5032*58b9f456SAndroid Build Coastguard Worker return __y < __x; 5033*58b9f456SAndroid Build Coastguard Worker} 5034*58b9f456SAndroid Build Coastguard Worker 5035*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5036*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5037*58b9f456SAndroid Build Coastguard Workerbool 5038*58b9f456SAndroid Build Coastguard Workeroperator>=(typename iterator_traits<_BiIter>::value_type const* __x, 5039*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5040*58b9f456SAndroid Build Coastguard Worker{ 5041*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 5042*58b9f456SAndroid Build Coastguard Worker} 5043*58b9f456SAndroid Build Coastguard Worker 5044*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5045*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5046*58b9f456SAndroid Build Coastguard Workerbool 5047*58b9f456SAndroid Build Coastguard Workeroperator<=(typename iterator_traits<_BiIter>::value_type const* __x, 5048*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5049*58b9f456SAndroid Build Coastguard Worker{ 5050*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 5051*58b9f456SAndroid Build Coastguard Worker} 5052*58b9f456SAndroid Build Coastguard Worker 5053*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5054*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5055*58b9f456SAndroid Build Coastguard Workerbool 5056*58b9f456SAndroid Build Coastguard Workeroperator==(const sub_match<_BiIter>& __x, 5057*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5058*58b9f456SAndroid Build Coastguard Worker{ 5059*58b9f456SAndroid Build Coastguard Worker return __x.compare(__y) == 0; 5060*58b9f456SAndroid Build Coastguard Worker} 5061*58b9f456SAndroid Build Coastguard Worker 5062*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5063*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5064*58b9f456SAndroid Build Coastguard Workerbool 5065*58b9f456SAndroid Build Coastguard Workeroperator!=(const sub_match<_BiIter>& __x, 5066*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5067*58b9f456SAndroid Build Coastguard Worker{ 5068*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 5069*58b9f456SAndroid Build Coastguard Worker} 5070*58b9f456SAndroid Build Coastguard Worker 5071*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5072*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5073*58b9f456SAndroid Build Coastguard Workerbool 5074*58b9f456SAndroid Build Coastguard Workeroperator<(const sub_match<_BiIter>& __x, 5075*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5076*58b9f456SAndroid Build Coastguard Worker{ 5077*58b9f456SAndroid Build Coastguard Worker return __x.compare(__y) < 0; 5078*58b9f456SAndroid Build Coastguard Worker} 5079*58b9f456SAndroid Build Coastguard Worker 5080*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5081*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5082*58b9f456SAndroid Build Coastguard Workerbool 5083*58b9f456SAndroid Build Coastguard Workeroperator>(const sub_match<_BiIter>& __x, 5084*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5085*58b9f456SAndroid Build Coastguard Worker{ 5086*58b9f456SAndroid Build Coastguard Worker return __y < __x; 5087*58b9f456SAndroid Build Coastguard Worker} 5088*58b9f456SAndroid Build Coastguard Worker 5089*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5090*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5091*58b9f456SAndroid Build Coastguard Workerbool 5092*58b9f456SAndroid Build Coastguard Workeroperator>=(const sub_match<_BiIter>& __x, 5093*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5094*58b9f456SAndroid Build Coastguard Worker{ 5095*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 5096*58b9f456SAndroid Build Coastguard Worker} 5097*58b9f456SAndroid Build Coastguard Worker 5098*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5099*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5100*58b9f456SAndroid Build Coastguard Workerbool 5101*58b9f456SAndroid Build Coastguard Workeroperator<=(const sub_match<_BiIter>& __x, 5102*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const* __y) 5103*58b9f456SAndroid Build Coastguard Worker{ 5104*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 5105*58b9f456SAndroid Build Coastguard Worker} 5106*58b9f456SAndroid Build Coastguard Worker 5107*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5108*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5109*58b9f456SAndroid Build Coastguard Workerbool 5110*58b9f456SAndroid Build Coastguard Workeroperator==(typename iterator_traits<_BiIter>::value_type const& __x, 5111*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5112*58b9f456SAndroid Build Coastguard Worker{ 5113*58b9f456SAndroid Build Coastguard Worker typedef basic_string<typename iterator_traits<_BiIter>::value_type> string_type; 5114*58b9f456SAndroid Build Coastguard Worker return __y.compare(string_type(1, __x)) == 0; 5115*58b9f456SAndroid Build Coastguard Worker} 5116*58b9f456SAndroid Build Coastguard Worker 5117*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5118*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5119*58b9f456SAndroid Build Coastguard Workerbool 5120*58b9f456SAndroid Build Coastguard Workeroperator!=(typename iterator_traits<_BiIter>::value_type const& __x, 5121*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5122*58b9f456SAndroid Build Coastguard Worker{ 5123*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 5124*58b9f456SAndroid Build Coastguard Worker} 5125*58b9f456SAndroid Build Coastguard Worker 5126*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5127*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5128*58b9f456SAndroid Build Coastguard Workerbool 5129*58b9f456SAndroid Build Coastguard Workeroperator<(typename iterator_traits<_BiIter>::value_type const& __x, 5130*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5131*58b9f456SAndroid Build Coastguard Worker{ 5132*58b9f456SAndroid Build Coastguard Worker typedef basic_string<typename iterator_traits<_BiIter>::value_type> string_type; 5133*58b9f456SAndroid Build Coastguard Worker return __y.compare(string_type(1, __x)) > 0; 5134*58b9f456SAndroid Build Coastguard Worker} 5135*58b9f456SAndroid Build Coastguard Worker 5136*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5137*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5138*58b9f456SAndroid Build Coastguard Workerbool 5139*58b9f456SAndroid Build Coastguard Workeroperator>(typename iterator_traits<_BiIter>::value_type const& __x, 5140*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5141*58b9f456SAndroid Build Coastguard Worker{ 5142*58b9f456SAndroid Build Coastguard Worker return __y < __x; 5143*58b9f456SAndroid Build Coastguard Worker} 5144*58b9f456SAndroid Build Coastguard Worker 5145*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5146*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5147*58b9f456SAndroid Build Coastguard Workerbool 5148*58b9f456SAndroid Build Coastguard Workeroperator>=(typename iterator_traits<_BiIter>::value_type const& __x, 5149*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5150*58b9f456SAndroid Build Coastguard Worker{ 5151*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 5152*58b9f456SAndroid Build Coastguard Worker} 5153*58b9f456SAndroid Build Coastguard Worker 5154*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5155*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5156*58b9f456SAndroid Build Coastguard Workerbool 5157*58b9f456SAndroid Build Coastguard Workeroperator<=(typename iterator_traits<_BiIter>::value_type const& __x, 5158*58b9f456SAndroid Build Coastguard Worker const sub_match<_BiIter>& __y) 5159*58b9f456SAndroid Build Coastguard Worker{ 5160*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 5161*58b9f456SAndroid Build Coastguard Worker} 5162*58b9f456SAndroid Build Coastguard Worker 5163*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5164*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5165*58b9f456SAndroid Build Coastguard Workerbool 5166*58b9f456SAndroid Build Coastguard Workeroperator==(const sub_match<_BiIter>& __x, 5167*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5168*58b9f456SAndroid Build Coastguard Worker{ 5169*58b9f456SAndroid Build Coastguard Worker typedef basic_string<typename iterator_traits<_BiIter>::value_type> string_type; 5170*58b9f456SAndroid Build Coastguard Worker return __x.compare(string_type(1, __y)) == 0; 5171*58b9f456SAndroid Build Coastguard Worker} 5172*58b9f456SAndroid Build Coastguard Worker 5173*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5174*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5175*58b9f456SAndroid Build Coastguard Workerbool 5176*58b9f456SAndroid Build Coastguard Workeroperator!=(const sub_match<_BiIter>& __x, 5177*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5178*58b9f456SAndroid Build Coastguard Worker{ 5179*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 5180*58b9f456SAndroid Build Coastguard Worker} 5181*58b9f456SAndroid Build Coastguard Worker 5182*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5183*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5184*58b9f456SAndroid Build Coastguard Workerbool 5185*58b9f456SAndroid Build Coastguard Workeroperator<(const sub_match<_BiIter>& __x, 5186*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5187*58b9f456SAndroid Build Coastguard Worker{ 5188*58b9f456SAndroid Build Coastguard Worker typedef basic_string<typename iterator_traits<_BiIter>::value_type> string_type; 5189*58b9f456SAndroid Build Coastguard Worker return __x.compare(string_type(1, __y)) < 0; 5190*58b9f456SAndroid Build Coastguard Worker} 5191*58b9f456SAndroid Build Coastguard Worker 5192*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5193*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5194*58b9f456SAndroid Build Coastguard Workerbool 5195*58b9f456SAndroid Build Coastguard Workeroperator>(const sub_match<_BiIter>& __x, 5196*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5197*58b9f456SAndroid Build Coastguard Worker{ 5198*58b9f456SAndroid Build Coastguard Worker return __y < __x; 5199*58b9f456SAndroid Build Coastguard Worker} 5200*58b9f456SAndroid Build Coastguard Worker 5201*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5202*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5203*58b9f456SAndroid Build Coastguard Workerbool 5204*58b9f456SAndroid Build Coastguard Workeroperator>=(const sub_match<_BiIter>& __x, 5205*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5206*58b9f456SAndroid Build Coastguard Worker{ 5207*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 5208*58b9f456SAndroid Build Coastguard Worker} 5209*58b9f456SAndroid Build Coastguard Worker 5210*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 5211*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5212*58b9f456SAndroid Build Coastguard Workerbool 5213*58b9f456SAndroid Build Coastguard Workeroperator<=(const sub_match<_BiIter>& __x, 5214*58b9f456SAndroid Build Coastguard Worker typename iterator_traits<_BiIter>::value_type const& __y) 5215*58b9f456SAndroid Build Coastguard Worker{ 5216*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 5217*58b9f456SAndroid Build Coastguard Worker} 5218*58b9f456SAndroid Build Coastguard Worker 5219*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _ST, class _BiIter> 5220*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5221*58b9f456SAndroid Build Coastguard Workerbasic_ostream<_CharT, _ST>& 5222*58b9f456SAndroid Build Coastguard Workeroperator<<(basic_ostream<_CharT, _ST>& __os, const sub_match<_BiIter>& __m) 5223*58b9f456SAndroid Build Coastguard Worker{ 5224*58b9f456SAndroid Build Coastguard Worker return __os << __m.str(); 5225*58b9f456SAndroid Build Coastguard Worker} 5226*58b9f456SAndroid Build Coastguard Worker 5227*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5228*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS match_results 5229*58b9f456SAndroid Build Coastguard Worker{ 5230*58b9f456SAndroid Build Coastguard Workerpublic: 5231*58b9f456SAndroid Build Coastguard Worker typedef _Allocator allocator_type; 5232*58b9f456SAndroid Build Coastguard Worker typedef sub_match<_BidirectionalIterator> value_type; 5233*58b9f456SAndroid Build Coastguard Workerprivate: 5234*58b9f456SAndroid Build Coastguard Worker typedef vector<value_type, allocator_type> __container_type; 5235*58b9f456SAndroid Build Coastguard Worker 5236*58b9f456SAndroid Build Coastguard Worker __container_type __matches_; 5237*58b9f456SAndroid Build Coastguard Worker value_type __unmatched_; 5238*58b9f456SAndroid Build Coastguard Worker value_type __prefix_; 5239*58b9f456SAndroid Build Coastguard Worker value_type __suffix_; 5240*58b9f456SAndroid Build Coastguard Worker bool __ready_; 5241*58b9f456SAndroid Build Coastguard Workerpublic: 5242*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __position_start_; 5243*58b9f456SAndroid Build Coastguard Worker typedef const value_type& const_reference; 5244*58b9f456SAndroid Build Coastguard Worker typedef value_type& reference; 5245*58b9f456SAndroid Build Coastguard Worker typedef typename __container_type::const_iterator const_iterator; 5246*58b9f456SAndroid Build Coastguard Worker typedef const_iterator iterator; 5247*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; 5248*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_traits<allocator_type>::size_type size_type; 5249*58b9f456SAndroid Build Coastguard Worker typedef typename iterator_traits<_BidirectionalIterator>::value_type char_type; 5250*58b9f456SAndroid Build Coastguard Worker typedef basic_string<char_type> string_type; 5251*58b9f456SAndroid Build Coastguard Worker 5252*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 5253*58b9f456SAndroid Build Coastguard Worker explicit match_results(const allocator_type& __a = allocator_type()); 5254*58b9f456SAndroid Build Coastguard Worker// match_results(const match_results&) = default; 5255*58b9f456SAndroid Build Coastguard Worker// match_results& operator=(const match_results&) = default; 5256*58b9f456SAndroid Build Coastguard Worker// match_results(match_results&& __m) = default; 5257*58b9f456SAndroid Build Coastguard Worker// match_results& operator=(match_results&& __m) = default; 5258*58b9f456SAndroid Build Coastguard Worker// ~match_results() = default; 5259*58b9f456SAndroid Build Coastguard Worker 5260*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5261*58b9f456SAndroid Build Coastguard Worker bool ready() const {return __ready_;} 5262*58b9f456SAndroid Build Coastguard Worker 5263*58b9f456SAndroid Build Coastguard Worker // size: 5264*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5265*58b9f456SAndroid Build Coastguard Worker size_type size() const _NOEXCEPT {return __matches_.size();} 5266*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5267*58b9f456SAndroid Build Coastguard Worker size_type max_size() const _NOEXCEPT {return __matches_.max_size();} 5268*58b9f456SAndroid Build Coastguard Worker _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 5269*58b9f456SAndroid Build Coastguard Worker bool empty() const _NOEXCEPT {return size() == 0;} 5270*58b9f456SAndroid Build Coastguard Worker 5271*58b9f456SAndroid Build Coastguard Worker // element access: 5272*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5273*58b9f456SAndroid Build Coastguard Worker difference_type length(size_type __sub = 0) const 5274*58b9f456SAndroid Build Coastguard Worker {return (*this)[__sub].length();} 5275*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5276*58b9f456SAndroid Build Coastguard Worker difference_type position(size_type __sub = 0) const 5277*58b9f456SAndroid Build Coastguard Worker {return _VSTD::distance(__position_start_, (*this)[__sub].first);} 5278*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5279*58b9f456SAndroid Build Coastguard Worker string_type str(size_type __sub = 0) const 5280*58b9f456SAndroid Build Coastguard Worker {return (*this)[__sub].str();} 5281*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5282*58b9f456SAndroid Build Coastguard Worker const_reference operator[](size_type __n) const 5283*58b9f456SAndroid Build Coastguard Worker {return __n < __matches_.size() ? __matches_[__n] : __unmatched_;} 5284*58b9f456SAndroid Build Coastguard Worker 5285*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5286*58b9f456SAndroid Build Coastguard Worker const_reference prefix() const {return __prefix_;} 5287*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5288*58b9f456SAndroid Build Coastguard Worker const_reference suffix() const {return __suffix_;} 5289*58b9f456SAndroid Build Coastguard Worker 5290*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5291*58b9f456SAndroid Build Coastguard Worker const_iterator begin() const {return empty() ? __matches_.end() : __matches_.begin();} 5292*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5293*58b9f456SAndroid Build Coastguard Worker const_iterator end() const {return __matches_.end();} 5294*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5295*58b9f456SAndroid Build Coastguard Worker const_iterator cbegin() const {return empty() ? __matches_.end() : __matches_.begin();} 5296*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5297*58b9f456SAndroid Build Coastguard Worker const_iterator cend() const {return __matches_.end();} 5298*58b9f456SAndroid Build Coastguard Worker 5299*58b9f456SAndroid Build Coastguard Worker // format: 5300*58b9f456SAndroid Build Coastguard Worker template <class _OutputIter> 5301*58b9f456SAndroid Build Coastguard Worker _OutputIter 5302*58b9f456SAndroid Build Coastguard Worker format(_OutputIter __output_iter, const char_type* __fmt_first, 5303*58b9f456SAndroid Build Coastguard Worker const char_type* __fmt_last, 5304*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::format_default) const; 5305*58b9f456SAndroid Build Coastguard Worker template <class _OutputIter, class _ST, class _SA> 5306*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5307*58b9f456SAndroid Build Coastguard Worker _OutputIter 5308*58b9f456SAndroid Build Coastguard Worker format(_OutputIter __output_iter, const basic_string<char_type, _ST, _SA>& __fmt, 5309*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::format_default) const 5310*58b9f456SAndroid Build Coastguard Worker {return format(__output_iter, __fmt.data(), __fmt.data() + __fmt.size(), __flags);} 5311*58b9f456SAndroid Build Coastguard Worker template <class _ST, class _SA> 5312*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5313*58b9f456SAndroid Build Coastguard Worker basic_string<char_type, _ST, _SA> 5314*58b9f456SAndroid Build Coastguard Worker format(const basic_string<char_type, _ST, _SA>& __fmt, 5315*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::format_default) const 5316*58b9f456SAndroid Build Coastguard Worker { 5317*58b9f456SAndroid Build Coastguard Worker basic_string<char_type, _ST, _SA> __r; 5318*58b9f456SAndroid Build Coastguard Worker format(back_inserter(__r), __fmt.data(), __fmt.data() + __fmt.size(), 5319*58b9f456SAndroid Build Coastguard Worker __flags); 5320*58b9f456SAndroid Build Coastguard Worker return __r; 5321*58b9f456SAndroid Build Coastguard Worker } 5322*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5323*58b9f456SAndroid Build Coastguard Worker string_type 5324*58b9f456SAndroid Build Coastguard Worker format(const char_type* __fmt, 5325*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::format_default) const 5326*58b9f456SAndroid Build Coastguard Worker { 5327*58b9f456SAndroid Build Coastguard Worker string_type __r; 5328*58b9f456SAndroid Build Coastguard Worker format(back_inserter(__r), __fmt, 5329*58b9f456SAndroid Build Coastguard Worker __fmt + char_traits<char_type>::length(__fmt), __flags); 5330*58b9f456SAndroid Build Coastguard Worker return __r; 5331*58b9f456SAndroid Build Coastguard Worker } 5332*58b9f456SAndroid Build Coastguard Worker 5333*58b9f456SAndroid Build Coastguard Worker // allocator: 5334*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5335*58b9f456SAndroid Build Coastguard Worker allocator_type get_allocator() const {return __matches_.get_allocator();} 5336*58b9f456SAndroid Build Coastguard Worker 5337*58b9f456SAndroid Build Coastguard Worker // swap: 5338*58b9f456SAndroid Build Coastguard Worker void swap(match_results& __m); 5339*58b9f456SAndroid Build Coastguard Worker 5340*58b9f456SAndroid Build Coastguard Worker template <class _Bp, class _Ap> 5341*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 5342*58b9f456SAndroid Build Coastguard Worker void __assign(_BidirectionalIterator __f, _BidirectionalIterator __l, 5343*58b9f456SAndroid Build Coastguard Worker const match_results<_Bp, _Ap>& __m, bool __no_update_pos) 5344*58b9f456SAndroid Build Coastguard Worker { 5345*58b9f456SAndroid Build Coastguard Worker _Bp __mf = __m.prefix().first; 5346*58b9f456SAndroid Build Coastguard Worker __matches_.resize(__m.size()); 5347*58b9f456SAndroid Build Coastguard Worker for (size_type __i = 0; __i < __matches_.size(); ++__i) 5348*58b9f456SAndroid Build Coastguard Worker { 5349*58b9f456SAndroid Build Coastguard Worker __matches_[__i].first = _VSTD::next(__f, _VSTD::distance(__mf, __m[__i].first)); 5350*58b9f456SAndroid Build Coastguard Worker __matches_[__i].second = _VSTD::next(__f, _VSTD::distance(__mf, __m[__i].second)); 5351*58b9f456SAndroid Build Coastguard Worker __matches_[__i].matched = __m[__i].matched; 5352*58b9f456SAndroid Build Coastguard Worker } 5353*58b9f456SAndroid Build Coastguard Worker __unmatched_.first = __l; 5354*58b9f456SAndroid Build Coastguard Worker __unmatched_.second = __l; 5355*58b9f456SAndroid Build Coastguard Worker __unmatched_.matched = false; 5356*58b9f456SAndroid Build Coastguard Worker __prefix_.first = _VSTD::next(__f, _VSTD::distance(__mf, __m.prefix().first)); 5357*58b9f456SAndroid Build Coastguard Worker __prefix_.second = _VSTD::next(__f, _VSTD::distance(__mf, __m.prefix().second)); 5358*58b9f456SAndroid Build Coastguard Worker __prefix_.matched = __m.prefix().matched; 5359*58b9f456SAndroid Build Coastguard Worker __suffix_.first = _VSTD::next(__f, _VSTD::distance(__mf, __m.suffix().first)); 5360*58b9f456SAndroid Build Coastguard Worker __suffix_.second = _VSTD::next(__f, _VSTD::distance(__mf, __m.suffix().second)); 5361*58b9f456SAndroid Build Coastguard Worker __suffix_.matched = __m.suffix().matched; 5362*58b9f456SAndroid Build Coastguard Worker if (!__no_update_pos) 5363*58b9f456SAndroid Build Coastguard Worker __position_start_ = __prefix_.first; 5364*58b9f456SAndroid Build Coastguard Worker __ready_ = __m.ready(); 5365*58b9f456SAndroid Build Coastguard Worker } 5366*58b9f456SAndroid Build Coastguard Worker 5367*58b9f456SAndroid Build Coastguard Workerprivate: 5368*58b9f456SAndroid Build Coastguard Worker void __init(unsigned __s, 5369*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __f, _BidirectionalIterator __l, 5370*58b9f456SAndroid Build Coastguard Worker bool __no_update_pos = false); 5371*58b9f456SAndroid Build Coastguard Worker 5372*58b9f456SAndroid Build Coastguard Worker template <class, class> friend class basic_regex; 5373*58b9f456SAndroid Build Coastguard Worker 5374*58b9f456SAndroid Build Coastguard Worker template <class _Bp, class _Ap, class _Cp, class _Tp> 5375*58b9f456SAndroid Build Coastguard Worker friend 5376*58b9f456SAndroid Build Coastguard Worker bool 5377*58b9f456SAndroid Build Coastguard Worker regex_match(_Bp, _Bp, match_results<_Bp, _Ap>&, const basic_regex<_Cp, _Tp>&, 5378*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type); 5379*58b9f456SAndroid Build Coastguard Worker 5380*58b9f456SAndroid Build Coastguard Worker template <class _Bp, class _Ap> 5381*58b9f456SAndroid Build Coastguard Worker friend 5382*58b9f456SAndroid Build Coastguard Worker bool 5383*58b9f456SAndroid Build Coastguard Worker operator==(const match_results<_Bp, _Ap>&, const match_results<_Bp, _Ap>&); 5384*58b9f456SAndroid Build Coastguard Worker 5385*58b9f456SAndroid Build Coastguard Worker template <class, class> friend class __lookahead; 5386*58b9f456SAndroid Build Coastguard Worker}; 5387*58b9f456SAndroid Build Coastguard Worker 5388*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5389*58b9f456SAndroid Build Coastguard Workermatch_results<_BidirectionalIterator, _Allocator>::match_results( 5390*58b9f456SAndroid Build Coastguard Worker const allocator_type& __a) 5391*58b9f456SAndroid Build Coastguard Worker : __matches_(__a), 5392*58b9f456SAndroid Build Coastguard Worker __unmatched_(), 5393*58b9f456SAndroid Build Coastguard Worker __prefix_(), 5394*58b9f456SAndroid Build Coastguard Worker __suffix_(), 5395*58b9f456SAndroid Build Coastguard Worker __ready_(false), 5396*58b9f456SAndroid Build Coastguard Worker __position_start_() 5397*58b9f456SAndroid Build Coastguard Worker{ 5398*58b9f456SAndroid Build Coastguard Worker} 5399*58b9f456SAndroid Build Coastguard Worker 5400*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5401*58b9f456SAndroid Build Coastguard Workervoid 5402*58b9f456SAndroid Build Coastguard Workermatch_results<_BidirectionalIterator, _Allocator>::__init(unsigned __s, 5403*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __f, _BidirectionalIterator __l, 5404*58b9f456SAndroid Build Coastguard Worker bool __no_update_pos) 5405*58b9f456SAndroid Build Coastguard Worker{ 5406*58b9f456SAndroid Build Coastguard Worker __unmatched_.first = __l; 5407*58b9f456SAndroid Build Coastguard Worker __unmatched_.second = __l; 5408*58b9f456SAndroid Build Coastguard Worker __unmatched_.matched = false; 5409*58b9f456SAndroid Build Coastguard Worker __matches_.assign(__s, __unmatched_); 5410*58b9f456SAndroid Build Coastguard Worker __prefix_.first = __f; 5411*58b9f456SAndroid Build Coastguard Worker __prefix_.second = __f; 5412*58b9f456SAndroid Build Coastguard Worker __prefix_.matched = false; 5413*58b9f456SAndroid Build Coastguard Worker __suffix_ = __unmatched_; 5414*58b9f456SAndroid Build Coastguard Worker if (!__no_update_pos) 5415*58b9f456SAndroid Build Coastguard Worker __position_start_ = __prefix_.first; 5416*58b9f456SAndroid Build Coastguard Worker __ready_ = true; 5417*58b9f456SAndroid Build Coastguard Worker} 5418*58b9f456SAndroid Build Coastguard Worker 5419*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5420*58b9f456SAndroid Build Coastguard Workertemplate <class _OutputIter> 5421*58b9f456SAndroid Build Coastguard Worker_OutputIter 5422*58b9f456SAndroid Build Coastguard Workermatch_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __output_iter, 5423*58b9f456SAndroid Build Coastguard Worker const char_type* __fmt_first, const char_type* __fmt_last, 5424*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags) const 5425*58b9f456SAndroid Build Coastguard Worker{ 5426*58b9f456SAndroid Build Coastguard Worker if (__flags & regex_constants::format_sed) 5427*58b9f456SAndroid Build Coastguard Worker { 5428*58b9f456SAndroid Build Coastguard Worker for (; __fmt_first != __fmt_last; ++__fmt_first) 5429*58b9f456SAndroid Build Coastguard Worker { 5430*58b9f456SAndroid Build Coastguard Worker if (*__fmt_first == '&') 5431*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__matches_[0].first, __matches_[0].second, 5432*58b9f456SAndroid Build Coastguard Worker __output_iter); 5433*58b9f456SAndroid Build Coastguard Worker else if (*__fmt_first == '\\' && __fmt_first + 1 != __fmt_last) 5434*58b9f456SAndroid Build Coastguard Worker { 5435*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5436*58b9f456SAndroid Build Coastguard Worker if ('0' <= *__fmt_first && *__fmt_first <= '9') 5437*58b9f456SAndroid Build Coastguard Worker { 5438*58b9f456SAndroid Build Coastguard Worker size_t __i = *__fmt_first - '0'; 5439*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy((*this)[__i].first, 5440*58b9f456SAndroid Build Coastguard Worker (*this)[__i].second, __output_iter); 5441*58b9f456SAndroid Build Coastguard Worker } 5442*58b9f456SAndroid Build Coastguard Worker else 5443*58b9f456SAndroid Build Coastguard Worker { 5444*58b9f456SAndroid Build Coastguard Worker *__output_iter = *__fmt_first; 5445*58b9f456SAndroid Build Coastguard Worker ++__output_iter; 5446*58b9f456SAndroid Build Coastguard Worker } 5447*58b9f456SAndroid Build Coastguard Worker } 5448*58b9f456SAndroid Build Coastguard Worker else 5449*58b9f456SAndroid Build Coastguard Worker { 5450*58b9f456SAndroid Build Coastguard Worker *__output_iter = *__fmt_first; 5451*58b9f456SAndroid Build Coastguard Worker ++__output_iter; 5452*58b9f456SAndroid Build Coastguard Worker } 5453*58b9f456SAndroid Build Coastguard Worker } 5454*58b9f456SAndroid Build Coastguard Worker } 5455*58b9f456SAndroid Build Coastguard Worker else 5456*58b9f456SAndroid Build Coastguard Worker { 5457*58b9f456SAndroid Build Coastguard Worker for (; __fmt_first != __fmt_last; ++__fmt_first) 5458*58b9f456SAndroid Build Coastguard Worker { 5459*58b9f456SAndroid Build Coastguard Worker if (*__fmt_first == '$' && __fmt_first + 1 != __fmt_last) 5460*58b9f456SAndroid Build Coastguard Worker { 5461*58b9f456SAndroid Build Coastguard Worker switch (__fmt_first[1]) 5462*58b9f456SAndroid Build Coastguard Worker { 5463*58b9f456SAndroid Build Coastguard Worker case '$': 5464*58b9f456SAndroid Build Coastguard Worker *__output_iter = *++__fmt_first; 5465*58b9f456SAndroid Build Coastguard Worker ++__output_iter; 5466*58b9f456SAndroid Build Coastguard Worker break; 5467*58b9f456SAndroid Build Coastguard Worker case '&': 5468*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5469*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__matches_[0].first, __matches_[0].second, 5470*58b9f456SAndroid Build Coastguard Worker __output_iter); 5471*58b9f456SAndroid Build Coastguard Worker break; 5472*58b9f456SAndroid Build Coastguard Worker case '`': 5473*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5474*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__prefix_.first, __prefix_.second, __output_iter); 5475*58b9f456SAndroid Build Coastguard Worker break; 5476*58b9f456SAndroid Build Coastguard Worker case '\'': 5477*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5478*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__suffix_.first, __suffix_.second, __output_iter); 5479*58b9f456SAndroid Build Coastguard Worker break; 5480*58b9f456SAndroid Build Coastguard Worker default: 5481*58b9f456SAndroid Build Coastguard Worker if ('0' <= __fmt_first[1] && __fmt_first[1] <= '9') 5482*58b9f456SAndroid Build Coastguard Worker { 5483*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5484*58b9f456SAndroid Build Coastguard Worker size_t __idx = *__fmt_first - '0'; 5485*58b9f456SAndroid Build Coastguard Worker if (__fmt_first + 1 != __fmt_last && 5486*58b9f456SAndroid Build Coastguard Worker '0' <= __fmt_first[1] && __fmt_first[1] <= '9') 5487*58b9f456SAndroid Build Coastguard Worker { 5488*58b9f456SAndroid Build Coastguard Worker ++__fmt_first; 5489*58b9f456SAndroid Build Coastguard Worker if (__idx >= std::numeric_limits<size_t>::max() / 10) 5490*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_escape>(); 5491*58b9f456SAndroid Build Coastguard Worker __idx = 10 * __idx + *__fmt_first - '0'; 5492*58b9f456SAndroid Build Coastguard Worker } 5493*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy((*this)[__idx].first, 5494*58b9f456SAndroid Build Coastguard Worker (*this)[__idx].second, __output_iter); 5495*58b9f456SAndroid Build Coastguard Worker } 5496*58b9f456SAndroid Build Coastguard Worker else 5497*58b9f456SAndroid Build Coastguard Worker { 5498*58b9f456SAndroid Build Coastguard Worker *__output_iter = *__fmt_first; 5499*58b9f456SAndroid Build Coastguard Worker ++__output_iter; 5500*58b9f456SAndroid Build Coastguard Worker } 5501*58b9f456SAndroid Build Coastguard Worker break; 5502*58b9f456SAndroid Build Coastguard Worker } 5503*58b9f456SAndroid Build Coastguard Worker } 5504*58b9f456SAndroid Build Coastguard Worker else 5505*58b9f456SAndroid Build Coastguard Worker { 5506*58b9f456SAndroid Build Coastguard Worker *__output_iter = *__fmt_first; 5507*58b9f456SAndroid Build Coastguard Worker ++__output_iter; 5508*58b9f456SAndroid Build Coastguard Worker } 5509*58b9f456SAndroid Build Coastguard Worker } 5510*58b9f456SAndroid Build Coastguard Worker } 5511*58b9f456SAndroid Build Coastguard Worker return __output_iter; 5512*58b9f456SAndroid Build Coastguard Worker} 5513*58b9f456SAndroid Build Coastguard Worker 5514*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5515*58b9f456SAndroid Build Coastguard Workervoid 5516*58b9f456SAndroid Build Coastguard Workermatch_results<_BidirectionalIterator, _Allocator>::swap(match_results& __m) 5517*58b9f456SAndroid Build Coastguard Worker{ 5518*58b9f456SAndroid Build Coastguard Worker using _VSTD::swap; 5519*58b9f456SAndroid Build Coastguard Worker swap(__matches_, __m.__matches_); 5520*58b9f456SAndroid Build Coastguard Worker swap(__unmatched_, __m.__unmatched_); 5521*58b9f456SAndroid Build Coastguard Worker swap(__prefix_, __m.__prefix_); 5522*58b9f456SAndroid Build Coastguard Worker swap(__suffix_, __m.__suffix_); 5523*58b9f456SAndroid Build Coastguard Worker swap(__position_start_, __m.__position_start_); 5524*58b9f456SAndroid Build Coastguard Worker swap(__ready_, __m.__ready_); 5525*58b9f456SAndroid Build Coastguard Worker} 5526*58b9f456SAndroid Build Coastguard Worker 5527*58b9f456SAndroid Build Coastguard Workertypedef match_results<const char*> cmatch; 5528*58b9f456SAndroid Build Coastguard Workertypedef match_results<const wchar_t*> wcmatch; 5529*58b9f456SAndroid Build Coastguard Workertypedef match_results<string::const_iterator> smatch; 5530*58b9f456SAndroid Build Coastguard Workertypedef match_results<wstring::const_iterator> wsmatch; 5531*58b9f456SAndroid Build Coastguard Worker 5532*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5533*58b9f456SAndroid Build Coastguard Workerbool 5534*58b9f456SAndroid Build Coastguard Workeroperator==(const match_results<_BidirectionalIterator, _Allocator>& __x, 5535*58b9f456SAndroid Build Coastguard Worker const match_results<_BidirectionalIterator, _Allocator>& __y) 5536*58b9f456SAndroid Build Coastguard Worker{ 5537*58b9f456SAndroid Build Coastguard Worker if (__x.__ready_ != __y.__ready_) 5538*58b9f456SAndroid Build Coastguard Worker return false; 5539*58b9f456SAndroid Build Coastguard Worker if (!__x.__ready_) 5540*58b9f456SAndroid Build Coastguard Worker return true; 5541*58b9f456SAndroid Build Coastguard Worker return __x.__matches_ == __y.__matches_ && 5542*58b9f456SAndroid Build Coastguard Worker __x.__prefix_ == __y.__prefix_ && 5543*58b9f456SAndroid Build Coastguard Worker __x.__suffix_ == __y.__suffix_; 5544*58b9f456SAndroid Build Coastguard Worker} 5545*58b9f456SAndroid Build Coastguard Worker 5546*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5547*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5548*58b9f456SAndroid Build Coastguard Workerbool 5549*58b9f456SAndroid Build Coastguard Workeroperator!=(const match_results<_BidirectionalIterator, _Allocator>& __x, 5550*58b9f456SAndroid Build Coastguard Worker const match_results<_BidirectionalIterator, _Allocator>& __y) 5551*58b9f456SAndroid Build Coastguard Worker{ 5552*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 5553*58b9f456SAndroid Build Coastguard Worker} 5554*58b9f456SAndroid Build Coastguard Worker 5555*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator> 5556*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5557*58b9f456SAndroid Build Coastguard Workervoid 5558*58b9f456SAndroid Build Coastguard Workerswap(match_results<_BidirectionalIterator, _Allocator>& __x, 5559*58b9f456SAndroid Build Coastguard Worker match_results<_BidirectionalIterator, _Allocator>& __y) 5560*58b9f456SAndroid Build Coastguard Worker{ 5561*58b9f456SAndroid Build Coastguard Worker __x.swap(__y); 5562*58b9f456SAndroid Build Coastguard Worker} 5563*58b9f456SAndroid Build Coastguard Worker 5564*58b9f456SAndroid Build Coastguard Worker// regex_search 5565*58b9f456SAndroid Build Coastguard Worker 5566*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5567*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator> 5568*58b9f456SAndroid Build Coastguard Workerbool 5569*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__match_at_start_ecma( 5570*58b9f456SAndroid Build Coastguard Worker const _CharT* __first, const _CharT* __last, 5571*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5572*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool __at_first) const 5573*58b9f456SAndroid Build Coastguard Worker{ 5574*58b9f456SAndroid Build Coastguard Worker vector<__state> __states; 5575*58b9f456SAndroid Build Coastguard Worker __node* __st = __start_.get(); 5576*58b9f456SAndroid Build Coastguard Worker if (__st) 5577*58b9f456SAndroid Build Coastguard Worker { 5578*58b9f456SAndroid Build Coastguard Worker sub_match<const _CharT*> __unmatched; 5579*58b9f456SAndroid Build Coastguard Worker __unmatched.first = __last; 5580*58b9f456SAndroid Build Coastguard Worker __unmatched.second = __last; 5581*58b9f456SAndroid Build Coastguard Worker __unmatched.matched = false; 5582*58b9f456SAndroid Build Coastguard Worker 5583*58b9f456SAndroid Build Coastguard Worker __states.push_back(__state()); 5584*58b9f456SAndroid Build Coastguard Worker __states.back().__do_ = 0; 5585*58b9f456SAndroid Build Coastguard Worker __states.back().__first_ = __first; 5586*58b9f456SAndroid Build Coastguard Worker __states.back().__current_ = __first; 5587*58b9f456SAndroid Build Coastguard Worker __states.back().__last_ = __last; 5588*58b9f456SAndroid Build Coastguard Worker __states.back().__sub_matches_.resize(mark_count(), __unmatched); 5589*58b9f456SAndroid Build Coastguard Worker __states.back().__loop_data_.resize(__loop_count()); 5590*58b9f456SAndroid Build Coastguard Worker __states.back().__node_ = __st; 5591*58b9f456SAndroid Build Coastguard Worker __states.back().__flags_ = __flags; 5592*58b9f456SAndroid Build Coastguard Worker __states.back().__at_first_ = __at_first; 5593*58b9f456SAndroid Build Coastguard Worker int __counter = 0; 5594*58b9f456SAndroid Build Coastguard Worker int __length = __last - __first; 5595*58b9f456SAndroid Build Coastguard Worker do 5596*58b9f456SAndroid Build Coastguard Worker { 5597*58b9f456SAndroid Build Coastguard Worker ++__counter; 5598*58b9f456SAndroid Build Coastguard Worker if (__counter % _LIBCPP_REGEX_COMPLEXITY_FACTOR == 0 && 5599*58b9f456SAndroid Build Coastguard Worker __counter / _LIBCPP_REGEX_COMPLEXITY_FACTOR >= __length) 5600*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_complexity>(); 5601*58b9f456SAndroid Build Coastguard Worker __state& __s = __states.back(); 5602*58b9f456SAndroid Build Coastguard Worker if (__s.__node_) 5603*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec(__s); 5604*58b9f456SAndroid Build Coastguard Worker switch (__s.__do_) 5605*58b9f456SAndroid Build Coastguard Worker { 5606*58b9f456SAndroid Build Coastguard Worker case __state::__end_state: 5607*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::match_not_null) && 5608*58b9f456SAndroid Build Coastguard Worker __s.__current_ == __first) 5609*58b9f456SAndroid Build Coastguard Worker { 5610*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5611*58b9f456SAndroid Build Coastguard Worker break; 5612*58b9f456SAndroid Build Coastguard Worker } 5613*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::__full_match) && 5614*58b9f456SAndroid Build Coastguard Worker __s.__current_ != __last) 5615*58b9f456SAndroid Build Coastguard Worker { 5616*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5617*58b9f456SAndroid Build Coastguard Worker break; 5618*58b9f456SAndroid Build Coastguard Worker } 5619*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].first = __first; 5620*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].second = _VSTD::next(__first, __s.__current_ - __first); 5621*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].matched = true; 5622*58b9f456SAndroid Build Coastguard Worker for (unsigned __i = 0; __i < __s.__sub_matches_.size(); ++__i) 5623*58b9f456SAndroid Build Coastguard Worker __m.__matches_[__i+1] = __s.__sub_matches_[__i]; 5624*58b9f456SAndroid Build Coastguard Worker return true; 5625*58b9f456SAndroid Build Coastguard Worker case __state::__accept_and_consume: 5626*58b9f456SAndroid Build Coastguard Worker case __state::__repeat: 5627*58b9f456SAndroid Build Coastguard Worker case __state::__accept_but_not_consume: 5628*58b9f456SAndroid Build Coastguard Worker break; 5629*58b9f456SAndroid Build Coastguard Worker case __state::__split: 5630*58b9f456SAndroid Build Coastguard Worker { 5631*58b9f456SAndroid Build Coastguard Worker __state __snext = __s; 5632*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec_split(true, __s); 5633*58b9f456SAndroid Build Coastguard Worker __snext.__node_->__exec_split(false, __snext); 5634*58b9f456SAndroid Build Coastguard Worker __states.push_back(_VSTD::move(__snext)); 5635*58b9f456SAndroid Build Coastguard Worker } 5636*58b9f456SAndroid Build Coastguard Worker break; 5637*58b9f456SAndroid Build Coastguard Worker case __state::__reject: 5638*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5639*58b9f456SAndroid Build Coastguard Worker break; 5640*58b9f456SAndroid Build Coastguard Worker default: 5641*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_unknown>(); 5642*58b9f456SAndroid Build Coastguard Worker break; 5643*58b9f456SAndroid Build Coastguard Worker 5644*58b9f456SAndroid Build Coastguard Worker } 5645*58b9f456SAndroid Build Coastguard Worker } while (!__states.empty()); 5646*58b9f456SAndroid Build Coastguard Worker } 5647*58b9f456SAndroid Build Coastguard Worker return false; 5648*58b9f456SAndroid Build Coastguard Worker} 5649*58b9f456SAndroid Build Coastguard Worker 5650*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5651*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator> 5652*58b9f456SAndroid Build Coastguard Workerbool 5653*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__match_at_start_posix_nosubs( 5654*58b9f456SAndroid Build Coastguard Worker const _CharT* __first, const _CharT* __last, 5655*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5656*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool __at_first) const 5657*58b9f456SAndroid Build Coastguard Worker{ 5658*58b9f456SAndroid Build Coastguard Worker deque<__state> __states; 5659*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __highest_j = 0; 5660*58b9f456SAndroid Build Coastguard Worker ptrdiff_t _Np = _VSTD::distance(__first, __last); 5661*58b9f456SAndroid Build Coastguard Worker __node* __st = __start_.get(); 5662*58b9f456SAndroid Build Coastguard Worker if (__st) 5663*58b9f456SAndroid Build Coastguard Worker { 5664*58b9f456SAndroid Build Coastguard Worker __states.push_back(__state()); 5665*58b9f456SAndroid Build Coastguard Worker __states.back().__do_ = 0; 5666*58b9f456SAndroid Build Coastguard Worker __states.back().__first_ = __first; 5667*58b9f456SAndroid Build Coastguard Worker __states.back().__current_ = __first; 5668*58b9f456SAndroid Build Coastguard Worker __states.back().__last_ = __last; 5669*58b9f456SAndroid Build Coastguard Worker __states.back().__loop_data_.resize(__loop_count()); 5670*58b9f456SAndroid Build Coastguard Worker __states.back().__node_ = __st; 5671*58b9f456SAndroid Build Coastguard Worker __states.back().__flags_ = __flags; 5672*58b9f456SAndroid Build Coastguard Worker __states.back().__at_first_ = __at_first; 5673*58b9f456SAndroid Build Coastguard Worker bool __matched = false; 5674*58b9f456SAndroid Build Coastguard Worker int __counter = 0; 5675*58b9f456SAndroid Build Coastguard Worker int __length = __last - __first; 5676*58b9f456SAndroid Build Coastguard Worker do 5677*58b9f456SAndroid Build Coastguard Worker { 5678*58b9f456SAndroid Build Coastguard Worker ++__counter; 5679*58b9f456SAndroid Build Coastguard Worker if (__counter % _LIBCPP_REGEX_COMPLEXITY_FACTOR == 0 && 5680*58b9f456SAndroid Build Coastguard Worker __counter / _LIBCPP_REGEX_COMPLEXITY_FACTOR >= __length) 5681*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_complexity>(); 5682*58b9f456SAndroid Build Coastguard Worker __state& __s = __states.back(); 5683*58b9f456SAndroid Build Coastguard Worker if (__s.__node_) 5684*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec(__s); 5685*58b9f456SAndroid Build Coastguard Worker switch (__s.__do_) 5686*58b9f456SAndroid Build Coastguard Worker { 5687*58b9f456SAndroid Build Coastguard Worker case __state::__end_state: 5688*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::match_not_null) && 5689*58b9f456SAndroid Build Coastguard Worker __s.__current_ == __first) 5690*58b9f456SAndroid Build Coastguard Worker { 5691*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5692*58b9f456SAndroid Build Coastguard Worker break; 5693*58b9f456SAndroid Build Coastguard Worker } 5694*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::__full_match) && 5695*58b9f456SAndroid Build Coastguard Worker __s.__current_ != __last) 5696*58b9f456SAndroid Build Coastguard Worker { 5697*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5698*58b9f456SAndroid Build Coastguard Worker break; 5699*58b9f456SAndroid Build Coastguard Worker } 5700*58b9f456SAndroid Build Coastguard Worker if (!__matched || __highest_j < __s.__current_ - __s.__first_) 5701*58b9f456SAndroid Build Coastguard Worker __highest_j = __s.__current_ - __s.__first_; 5702*58b9f456SAndroid Build Coastguard Worker __matched = true; 5703*58b9f456SAndroid Build Coastguard Worker if (__highest_j == _Np) 5704*58b9f456SAndroid Build Coastguard Worker __states.clear(); 5705*58b9f456SAndroid Build Coastguard Worker else 5706*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5707*58b9f456SAndroid Build Coastguard Worker break; 5708*58b9f456SAndroid Build Coastguard Worker case __state::__consume_input: 5709*58b9f456SAndroid Build Coastguard Worker break; 5710*58b9f456SAndroid Build Coastguard Worker case __state::__accept_and_consume: 5711*58b9f456SAndroid Build Coastguard Worker __states.push_front(_VSTD::move(__s)); 5712*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5713*58b9f456SAndroid Build Coastguard Worker break; 5714*58b9f456SAndroid Build Coastguard Worker case __state::__repeat: 5715*58b9f456SAndroid Build Coastguard Worker case __state::__accept_but_not_consume: 5716*58b9f456SAndroid Build Coastguard Worker break; 5717*58b9f456SAndroid Build Coastguard Worker case __state::__split: 5718*58b9f456SAndroid Build Coastguard Worker { 5719*58b9f456SAndroid Build Coastguard Worker __state __snext = __s; 5720*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec_split(true, __s); 5721*58b9f456SAndroid Build Coastguard Worker __snext.__node_->__exec_split(false, __snext); 5722*58b9f456SAndroid Build Coastguard Worker __states.push_back(_VSTD::move(__snext)); 5723*58b9f456SAndroid Build Coastguard Worker } 5724*58b9f456SAndroid Build Coastguard Worker break; 5725*58b9f456SAndroid Build Coastguard Worker case __state::__reject: 5726*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5727*58b9f456SAndroid Build Coastguard Worker break; 5728*58b9f456SAndroid Build Coastguard Worker default: 5729*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_unknown>(); 5730*58b9f456SAndroid Build Coastguard Worker break; 5731*58b9f456SAndroid Build Coastguard Worker } 5732*58b9f456SAndroid Build Coastguard Worker } while (!__states.empty()); 5733*58b9f456SAndroid Build Coastguard Worker if (__matched) 5734*58b9f456SAndroid Build Coastguard Worker { 5735*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].first = __first; 5736*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].second = _VSTD::next(__first, __highest_j); 5737*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].matched = true; 5738*58b9f456SAndroid Build Coastguard Worker return true; 5739*58b9f456SAndroid Build Coastguard Worker } 5740*58b9f456SAndroid Build Coastguard Worker } 5741*58b9f456SAndroid Build Coastguard Worker return false; 5742*58b9f456SAndroid Build Coastguard Worker} 5743*58b9f456SAndroid Build Coastguard Worker 5744*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5745*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator> 5746*58b9f456SAndroid Build Coastguard Workerbool 5747*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__match_at_start_posix_subs( 5748*58b9f456SAndroid Build Coastguard Worker const _CharT* __first, const _CharT* __last, 5749*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5750*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool __at_first) const 5751*58b9f456SAndroid Build Coastguard Worker{ 5752*58b9f456SAndroid Build Coastguard Worker vector<__state> __states; 5753*58b9f456SAndroid Build Coastguard Worker __state __best_state; 5754*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __j = 0; 5755*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __highest_j = 0; 5756*58b9f456SAndroid Build Coastguard Worker ptrdiff_t _Np = _VSTD::distance(__first, __last); 5757*58b9f456SAndroid Build Coastguard Worker __node* __st = __start_.get(); 5758*58b9f456SAndroid Build Coastguard Worker if (__st) 5759*58b9f456SAndroid Build Coastguard Worker { 5760*58b9f456SAndroid Build Coastguard Worker sub_match<const _CharT*> __unmatched; 5761*58b9f456SAndroid Build Coastguard Worker __unmatched.first = __last; 5762*58b9f456SAndroid Build Coastguard Worker __unmatched.second = __last; 5763*58b9f456SAndroid Build Coastguard Worker __unmatched.matched = false; 5764*58b9f456SAndroid Build Coastguard Worker 5765*58b9f456SAndroid Build Coastguard Worker __states.push_back(__state()); 5766*58b9f456SAndroid Build Coastguard Worker __states.back().__do_ = 0; 5767*58b9f456SAndroid Build Coastguard Worker __states.back().__first_ = __first; 5768*58b9f456SAndroid Build Coastguard Worker __states.back().__current_ = __first; 5769*58b9f456SAndroid Build Coastguard Worker __states.back().__last_ = __last; 5770*58b9f456SAndroid Build Coastguard Worker __states.back().__sub_matches_.resize(mark_count(), __unmatched); 5771*58b9f456SAndroid Build Coastguard Worker __states.back().__loop_data_.resize(__loop_count()); 5772*58b9f456SAndroid Build Coastguard Worker __states.back().__node_ = __st; 5773*58b9f456SAndroid Build Coastguard Worker __states.back().__flags_ = __flags; 5774*58b9f456SAndroid Build Coastguard Worker __states.back().__at_first_ = __at_first; 5775*58b9f456SAndroid Build Coastguard Worker const _CharT* __current = __first; 5776*58b9f456SAndroid Build Coastguard Worker bool __matched = false; 5777*58b9f456SAndroid Build Coastguard Worker int __counter = 0; 5778*58b9f456SAndroid Build Coastguard Worker int __length = __last - __first; 5779*58b9f456SAndroid Build Coastguard Worker do 5780*58b9f456SAndroid Build Coastguard Worker { 5781*58b9f456SAndroid Build Coastguard Worker ++__counter; 5782*58b9f456SAndroid Build Coastguard Worker if (__counter % _LIBCPP_REGEX_COMPLEXITY_FACTOR == 0 && 5783*58b9f456SAndroid Build Coastguard Worker __counter / _LIBCPP_REGEX_COMPLEXITY_FACTOR >= __length) 5784*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::error_complexity>(); 5785*58b9f456SAndroid Build Coastguard Worker __state& __s = __states.back(); 5786*58b9f456SAndroid Build Coastguard Worker if (__s.__node_) 5787*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec(__s); 5788*58b9f456SAndroid Build Coastguard Worker switch (__s.__do_) 5789*58b9f456SAndroid Build Coastguard Worker { 5790*58b9f456SAndroid Build Coastguard Worker case __state::__end_state: 5791*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::match_not_null) && 5792*58b9f456SAndroid Build Coastguard Worker __s.__current_ == __first) 5793*58b9f456SAndroid Build Coastguard Worker { 5794*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5795*58b9f456SAndroid Build Coastguard Worker break; 5796*58b9f456SAndroid Build Coastguard Worker } 5797*58b9f456SAndroid Build Coastguard Worker if ((__flags & regex_constants::__full_match) && 5798*58b9f456SAndroid Build Coastguard Worker __s.__current_ != __last) 5799*58b9f456SAndroid Build Coastguard Worker { 5800*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5801*58b9f456SAndroid Build Coastguard Worker break; 5802*58b9f456SAndroid Build Coastguard Worker } 5803*58b9f456SAndroid Build Coastguard Worker if (!__matched || __highest_j < __s.__current_ - __s.__first_) 5804*58b9f456SAndroid Build Coastguard Worker { 5805*58b9f456SAndroid Build Coastguard Worker __highest_j = __s.__current_ - __s.__first_; 5806*58b9f456SAndroid Build Coastguard Worker __best_state = __s; 5807*58b9f456SAndroid Build Coastguard Worker } 5808*58b9f456SAndroid Build Coastguard Worker __matched = true; 5809*58b9f456SAndroid Build Coastguard Worker if (__highest_j == _Np) 5810*58b9f456SAndroid Build Coastguard Worker __states.clear(); 5811*58b9f456SAndroid Build Coastguard Worker else 5812*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5813*58b9f456SAndroid Build Coastguard Worker break; 5814*58b9f456SAndroid Build Coastguard Worker case __state::__accept_and_consume: 5815*58b9f456SAndroid Build Coastguard Worker __j += __s.__current_ - __current; 5816*58b9f456SAndroid Build Coastguard Worker __current = __s.__current_; 5817*58b9f456SAndroid Build Coastguard Worker break; 5818*58b9f456SAndroid Build Coastguard Worker case __state::__repeat: 5819*58b9f456SAndroid Build Coastguard Worker case __state::__accept_but_not_consume: 5820*58b9f456SAndroid Build Coastguard Worker break; 5821*58b9f456SAndroid Build Coastguard Worker case __state::__split: 5822*58b9f456SAndroid Build Coastguard Worker { 5823*58b9f456SAndroid Build Coastguard Worker __state __snext = __s; 5824*58b9f456SAndroid Build Coastguard Worker __s.__node_->__exec_split(true, __s); 5825*58b9f456SAndroid Build Coastguard Worker __snext.__node_->__exec_split(false, __snext); 5826*58b9f456SAndroid Build Coastguard Worker __states.push_back(_VSTD::move(__snext)); 5827*58b9f456SAndroid Build Coastguard Worker } 5828*58b9f456SAndroid Build Coastguard Worker break; 5829*58b9f456SAndroid Build Coastguard Worker case __state::__reject: 5830*58b9f456SAndroid Build Coastguard Worker __states.pop_back(); 5831*58b9f456SAndroid Build Coastguard Worker break; 5832*58b9f456SAndroid Build Coastguard Worker default: 5833*58b9f456SAndroid Build Coastguard Worker __throw_regex_error<regex_constants::__re_err_unknown>(); 5834*58b9f456SAndroid Build Coastguard Worker break; 5835*58b9f456SAndroid Build Coastguard Worker } 5836*58b9f456SAndroid Build Coastguard Worker } while (!__states.empty()); 5837*58b9f456SAndroid Build Coastguard Worker if (__matched) 5838*58b9f456SAndroid Build Coastguard Worker { 5839*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].first = __first; 5840*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].second = _VSTD::next(__first, __highest_j); 5841*58b9f456SAndroid Build Coastguard Worker __m.__matches_[0].matched = true; 5842*58b9f456SAndroid Build Coastguard Worker for (unsigned __i = 0; __i < __best_state.__sub_matches_.size(); ++__i) 5843*58b9f456SAndroid Build Coastguard Worker __m.__matches_[__i+1] = __best_state.__sub_matches_[__i]; 5844*58b9f456SAndroid Build Coastguard Worker return true; 5845*58b9f456SAndroid Build Coastguard Worker } 5846*58b9f456SAndroid Build Coastguard Worker } 5847*58b9f456SAndroid Build Coastguard Worker return false; 5848*58b9f456SAndroid Build Coastguard Worker} 5849*58b9f456SAndroid Build Coastguard Worker 5850*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5851*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator> 5852*58b9f456SAndroid Build Coastguard Workerbool 5853*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__match_at_start( 5854*58b9f456SAndroid Build Coastguard Worker const _CharT* __first, const _CharT* __last, 5855*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5856*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags, bool __at_first) const 5857*58b9f456SAndroid Build Coastguard Worker{ 5858*58b9f456SAndroid Build Coastguard Worker if ((__flags_ & 0x1F0) == ECMAScript) 5859*58b9f456SAndroid Build Coastguard Worker return __match_at_start_ecma(__first, __last, __m, __flags, __at_first); 5860*58b9f456SAndroid Build Coastguard Worker if (mark_count() == 0) 5861*58b9f456SAndroid Build Coastguard Worker return __match_at_start_posix_nosubs(__first, __last, __m, __flags, __at_first); 5862*58b9f456SAndroid Build Coastguard Worker return __match_at_start_posix_subs(__first, __last, __m, __flags, __at_first); 5863*58b9f456SAndroid Build Coastguard Worker} 5864*58b9f456SAndroid Build Coastguard Worker 5865*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5866*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator> 5867*58b9f456SAndroid Build Coastguard Workerbool 5868*58b9f456SAndroid Build Coastguard Workerbasic_regex<_CharT, _Traits>::__search( 5869*58b9f456SAndroid Build Coastguard Worker const _CharT* __first, const _CharT* __last, 5870*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5871*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags) const 5872*58b9f456SAndroid Build Coastguard Worker{ 5873*58b9f456SAndroid Build Coastguard Worker __m.__init(1 + mark_count(), __first, __last, 5874*58b9f456SAndroid Build Coastguard Worker __flags & regex_constants::__no_update_pos); 5875*58b9f456SAndroid Build Coastguard Worker if (__match_at_start(__first, __last, __m, __flags, 5876*58b9f456SAndroid Build Coastguard Worker !(__flags & regex_constants::__no_update_pos))) 5877*58b9f456SAndroid Build Coastguard Worker { 5878*58b9f456SAndroid Build Coastguard Worker __m.__prefix_.second = __m[0].first; 5879*58b9f456SAndroid Build Coastguard Worker __m.__prefix_.matched = __m.__prefix_.first != __m.__prefix_.second; 5880*58b9f456SAndroid Build Coastguard Worker __m.__suffix_.first = __m[0].second; 5881*58b9f456SAndroid Build Coastguard Worker __m.__suffix_.matched = __m.__suffix_.first != __m.__suffix_.second; 5882*58b9f456SAndroid Build Coastguard Worker return true; 5883*58b9f456SAndroid Build Coastguard Worker } 5884*58b9f456SAndroid Build Coastguard Worker if (__first != __last && !(__flags & regex_constants::match_continuous)) 5885*58b9f456SAndroid Build Coastguard Worker { 5886*58b9f456SAndroid Build Coastguard Worker __flags |= regex_constants::match_prev_avail; 5887*58b9f456SAndroid Build Coastguard Worker for (++__first; __first != __last; ++__first) 5888*58b9f456SAndroid Build Coastguard Worker { 5889*58b9f456SAndroid Build Coastguard Worker __m.__matches_.assign(__m.size(), __m.__unmatched_); 5890*58b9f456SAndroid Build Coastguard Worker if (__match_at_start(__first, __last, __m, __flags, false)) 5891*58b9f456SAndroid Build Coastguard Worker { 5892*58b9f456SAndroid Build Coastguard Worker __m.__prefix_.second = __m[0].first; 5893*58b9f456SAndroid Build Coastguard Worker __m.__prefix_.matched = __m.__prefix_.first != __m.__prefix_.second; 5894*58b9f456SAndroid Build Coastguard Worker __m.__suffix_.first = __m[0].second; 5895*58b9f456SAndroid Build Coastguard Worker __m.__suffix_.matched = __m.__suffix_.first != __m.__suffix_.second; 5896*58b9f456SAndroid Build Coastguard Worker return true; 5897*58b9f456SAndroid Build Coastguard Worker } 5898*58b9f456SAndroid Build Coastguard Worker __m.__matches_.assign(__m.size(), __m.__unmatched_); 5899*58b9f456SAndroid Build Coastguard Worker } 5900*58b9f456SAndroid Build Coastguard Worker } 5901*58b9f456SAndroid Build Coastguard Worker __m.__matches_.clear(); 5902*58b9f456SAndroid Build Coastguard Worker return false; 5903*58b9f456SAndroid Build Coastguard Worker} 5904*58b9f456SAndroid Build Coastguard Worker 5905*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator, class _CharT, class _Traits> 5906*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5907*58b9f456SAndroid Build Coastguard Workerbool 5908*58b9f456SAndroid Build Coastguard Workerregex_search(_BidirectionalIterator __first, _BidirectionalIterator __last, 5909*58b9f456SAndroid Build Coastguard Worker match_results<_BidirectionalIterator, _Allocator>& __m, 5910*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5911*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5912*58b9f456SAndroid Build Coastguard Worker{ 5913*58b9f456SAndroid Build Coastguard Worker int __offset = (__flags & regex_constants::match_prev_avail) ? 1 : 0; 5914*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __s(_VSTD::prev(__first, __offset), __last); 5915*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 5916*58b9f456SAndroid Build Coastguard Worker bool __r = __e.__search(__s.data() + __offset, __s.data() + __s.size(), __mc, __flags); 5917*58b9f456SAndroid Build Coastguard Worker __m.__assign(__first, __last, __mc, __flags & regex_constants::__no_update_pos); 5918*58b9f456SAndroid Build Coastguard Worker return __r; 5919*58b9f456SAndroid Build Coastguard Worker} 5920*58b9f456SAndroid Build Coastguard Worker 5921*58b9f456SAndroid Build Coastguard Workertemplate <class _Iter, class _Allocator, class _CharT, class _Traits> 5922*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5923*58b9f456SAndroid Build Coastguard Workerbool 5924*58b9f456SAndroid Build Coastguard Workerregex_search(__wrap_iter<_Iter> __first, 5925*58b9f456SAndroid Build Coastguard Worker __wrap_iter<_Iter> __last, 5926*58b9f456SAndroid Build Coastguard Worker match_results<__wrap_iter<_Iter>, _Allocator>& __m, 5927*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5928*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5929*58b9f456SAndroid Build Coastguard Worker{ 5930*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 5931*58b9f456SAndroid Build Coastguard Worker bool __r = __e.__search(__first.base(), __last.base(), __mc, __flags); 5932*58b9f456SAndroid Build Coastguard Worker __m.__assign(__first, __last, __mc, __flags & regex_constants::__no_update_pos); 5933*58b9f456SAndroid Build Coastguard Worker return __r; 5934*58b9f456SAndroid Build Coastguard Worker} 5935*58b9f456SAndroid Build Coastguard Worker 5936*58b9f456SAndroid Build Coastguard Workertemplate <class _Allocator, class _CharT, class _Traits> 5937*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5938*58b9f456SAndroid Build Coastguard Workerbool 5939*58b9f456SAndroid Build Coastguard Workerregex_search(const _CharT* __first, const _CharT* __last, 5940*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*, _Allocator>& __m, 5941*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5942*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5943*58b9f456SAndroid Build Coastguard Worker{ 5944*58b9f456SAndroid Build Coastguard Worker return __e.__search(__first, __last, __m, __flags); 5945*58b9f456SAndroid Build Coastguard Worker} 5946*58b9f456SAndroid Build Coastguard Worker 5947*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 5948*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5949*58b9f456SAndroid Build Coastguard Workerbool 5950*58b9f456SAndroid Build Coastguard Workerregex_search(_BidirectionalIterator __first, _BidirectionalIterator __last, 5951*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5952*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5953*58b9f456SAndroid Build Coastguard Worker{ 5954*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __s(__first, __last); 5955*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 5956*58b9f456SAndroid Build Coastguard Worker return __e.__search(__s.data(), __s.data() + __s.size(), __mc, __flags); 5957*58b9f456SAndroid Build Coastguard Worker} 5958*58b9f456SAndroid Build Coastguard Worker 5959*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5960*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5961*58b9f456SAndroid Build Coastguard Workerbool 5962*58b9f456SAndroid Build Coastguard Workerregex_search(const _CharT* __first, const _CharT* __last, 5963*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5964*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5965*58b9f456SAndroid Build Coastguard Worker{ 5966*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 5967*58b9f456SAndroid Build Coastguard Worker return __e.__search(__first, __last, __mc, __flags); 5968*58b9f456SAndroid Build Coastguard Worker} 5969*58b9f456SAndroid Build Coastguard Worker 5970*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Allocator, class _Traits> 5971*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5972*58b9f456SAndroid Build Coastguard Workerbool 5973*58b9f456SAndroid Build Coastguard Workerregex_search(const _CharT* __str, match_results<const _CharT*, _Allocator>& __m, 5974*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5975*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5976*58b9f456SAndroid Build Coastguard Worker{ 5977*58b9f456SAndroid Build Coastguard Worker return __e.__search(__str, __str + _Traits::length(__str), __m, __flags); 5978*58b9f456SAndroid Build Coastguard Worker} 5979*58b9f456SAndroid Build Coastguard Worker 5980*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 5981*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5982*58b9f456SAndroid Build Coastguard Workerbool 5983*58b9f456SAndroid Build Coastguard Workerregex_search(const _CharT* __str, const basic_regex<_CharT, _Traits>& __e, 5984*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5985*58b9f456SAndroid Build Coastguard Worker{ 5986*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __m; 5987*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_search(__str, __m, __e, __flags); 5988*58b9f456SAndroid Build Coastguard Worker} 5989*58b9f456SAndroid Build Coastguard Worker 5990*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _CharT, class _Traits> 5991*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 5992*58b9f456SAndroid Build Coastguard Workerbool 5993*58b9f456SAndroid Build Coastguard Workerregex_search(const basic_string<_CharT, _ST, _SA>& __s, 5994*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 5995*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 5996*58b9f456SAndroid Build Coastguard Worker{ 5997*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 5998*58b9f456SAndroid Build Coastguard Worker return __e.__search(__s.data(), __s.data() + __s.size(), __mc, __flags); 5999*58b9f456SAndroid Build Coastguard Worker} 6000*58b9f456SAndroid Build Coastguard Worker 6001*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _Allocator, class _CharT, class _Traits> 6002*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6003*58b9f456SAndroid Build Coastguard Workerbool 6004*58b9f456SAndroid Build Coastguard Workerregex_search(const basic_string<_CharT, _ST, _SA>& __s, 6005*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<_CharT, _ST, _SA>::const_iterator, _Allocator>& __m, 6006*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6007*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6008*58b9f456SAndroid Build Coastguard Worker{ 6009*58b9f456SAndroid Build Coastguard Worker match_results<const _CharT*> __mc; 6010*58b9f456SAndroid Build Coastguard Worker bool __r = __e.__search(__s.data(), __s.data() + __s.size(), __mc, __flags); 6011*58b9f456SAndroid Build Coastguard Worker __m.__assign(__s.begin(), __s.end(), __mc, __flags & regex_constants::__no_update_pos); 6012*58b9f456SAndroid Build Coastguard Worker return __r; 6013*58b9f456SAndroid Build Coastguard Worker} 6014*58b9f456SAndroid Build Coastguard Worker 6015*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6016*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _Ap, class _Cp, class _Tp> 6017*58b9f456SAndroid Build Coastguard Workerbool 6018*58b9f456SAndroid Build Coastguard Workerregex_search(const basic_string<_Cp, _ST, _SA>&& __s, 6019*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<_Cp, _ST, _SA>::const_iterator, _Ap>&, 6020*58b9f456SAndroid Build Coastguard Worker const basic_regex<_Cp, _Tp>& __e, 6021*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) = delete; 6022*58b9f456SAndroid Build Coastguard Worker#endif 6023*58b9f456SAndroid Build Coastguard Worker 6024*58b9f456SAndroid Build Coastguard Worker// regex_match 6025*58b9f456SAndroid Build Coastguard Worker 6026*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _Allocator, class _CharT, class _Traits> 6027*58b9f456SAndroid Build Coastguard Workerbool 6028*58b9f456SAndroid Build Coastguard Workerregex_match(_BidirectionalIterator __first, _BidirectionalIterator __last, 6029*58b9f456SAndroid Build Coastguard Worker match_results<_BidirectionalIterator, _Allocator>& __m, 6030*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6031*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6032*58b9f456SAndroid Build Coastguard Worker{ 6033*58b9f456SAndroid Build Coastguard Worker bool __r = _VSTD::regex_search( 6034*58b9f456SAndroid Build Coastguard Worker __first, __last, __m, __e, 6035*58b9f456SAndroid Build Coastguard Worker __flags | regex_constants::match_continuous | 6036*58b9f456SAndroid Build Coastguard Worker regex_constants::__full_match); 6037*58b9f456SAndroid Build Coastguard Worker if (__r) 6038*58b9f456SAndroid Build Coastguard Worker { 6039*58b9f456SAndroid Build Coastguard Worker __r = !__m.suffix().matched; 6040*58b9f456SAndroid Build Coastguard Worker if (!__r) 6041*58b9f456SAndroid Build Coastguard Worker __m.__matches_.clear(); 6042*58b9f456SAndroid Build Coastguard Worker } 6043*58b9f456SAndroid Build Coastguard Worker return __r; 6044*58b9f456SAndroid Build Coastguard Worker} 6045*58b9f456SAndroid Build Coastguard Worker 6046*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6047*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6048*58b9f456SAndroid Build Coastguard Workerbool 6049*58b9f456SAndroid Build Coastguard Workerregex_match(_BidirectionalIterator __first, _BidirectionalIterator __last, 6050*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6051*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6052*58b9f456SAndroid Build Coastguard Worker{ 6053*58b9f456SAndroid Build Coastguard Worker match_results<_BidirectionalIterator> __m; 6054*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_match(__first, __last, __m, __e, __flags); 6055*58b9f456SAndroid Build Coastguard Worker} 6056*58b9f456SAndroid Build Coastguard Worker 6057*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Allocator, class _Traits> 6058*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6059*58b9f456SAndroid Build Coastguard Workerbool 6060*58b9f456SAndroid Build Coastguard Workerregex_match(const _CharT* __str, match_results<const _CharT*, _Allocator>& __m, 6061*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6062*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6063*58b9f456SAndroid Build Coastguard Worker{ 6064*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_match(__str, __str + _Traits::length(__str), __m, __e, __flags); 6065*58b9f456SAndroid Build Coastguard Worker} 6066*58b9f456SAndroid Build Coastguard Worker 6067*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _Allocator, class _CharT, class _Traits> 6068*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6069*58b9f456SAndroid Build Coastguard Workerbool 6070*58b9f456SAndroid Build Coastguard Workerregex_match(const basic_string<_CharT, _ST, _SA>& __s, 6071*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<_CharT, _ST, _SA>::const_iterator, _Allocator>& __m, 6072*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6073*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6074*58b9f456SAndroid Build Coastguard Worker{ 6075*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_match(__s.begin(), __s.end(), __m, __e, __flags); 6076*58b9f456SAndroid Build Coastguard Worker} 6077*58b9f456SAndroid Build Coastguard Worker 6078*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6079*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _Allocator, class _CharT, class _Traits> 6080*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6081*58b9f456SAndroid Build Coastguard Workerbool 6082*58b9f456SAndroid Build Coastguard Workerregex_match(const basic_string<_CharT, _ST, _SA>&& __s, 6083*58b9f456SAndroid Build Coastguard Worker match_results<typename basic_string<_CharT, _ST, _SA>::const_iterator, _Allocator>& __m, 6084*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6085*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) = delete; 6086*58b9f456SAndroid Build Coastguard Worker#endif 6087*58b9f456SAndroid Build Coastguard Worker 6088*58b9f456SAndroid Build Coastguard Workertemplate <class _CharT, class _Traits> 6089*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6090*58b9f456SAndroid Build Coastguard Workerbool 6091*58b9f456SAndroid Build Coastguard Workerregex_match(const _CharT* __str, const basic_regex<_CharT, _Traits>& __e, 6092*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6093*58b9f456SAndroid Build Coastguard Worker{ 6094*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_match(__str, __str + _Traits::length(__str), __e, __flags); 6095*58b9f456SAndroid Build Coastguard Worker} 6096*58b9f456SAndroid Build Coastguard Worker 6097*58b9f456SAndroid Build Coastguard Workertemplate <class _ST, class _SA, class _CharT, class _Traits> 6098*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6099*58b9f456SAndroid Build Coastguard Workerbool 6100*58b9f456SAndroid Build Coastguard Workerregex_match(const basic_string<_CharT, _ST, _SA>& __s, 6101*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6102*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6103*58b9f456SAndroid Build Coastguard Worker{ 6104*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_match(__s.begin(), __s.end(), __e, __flags); 6105*58b9f456SAndroid Build Coastguard Worker} 6106*58b9f456SAndroid Build Coastguard Worker 6107*58b9f456SAndroid Build Coastguard Worker// regex_iterator 6108*58b9f456SAndroid Build Coastguard Worker 6109*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, 6110*58b9f456SAndroid Build Coastguard Worker class _CharT = typename iterator_traits<_BidirectionalIterator>::value_type, 6111*58b9f456SAndroid Build Coastguard Worker class _Traits = regex_traits<_CharT> > 6112*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS regex_iterator 6113*58b9f456SAndroid Build Coastguard Worker{ 6114*58b9f456SAndroid Build Coastguard Workerpublic: 6115*58b9f456SAndroid Build Coastguard Worker typedef basic_regex<_CharT, _Traits> regex_type; 6116*58b9f456SAndroid Build Coastguard Worker typedef match_results<_BidirectionalIterator> value_type; 6117*58b9f456SAndroid Build Coastguard Worker typedef ptrdiff_t difference_type; 6118*58b9f456SAndroid Build Coastguard Worker typedef const value_type* pointer; 6119*58b9f456SAndroid Build Coastguard Worker typedef const value_type& reference; 6120*58b9f456SAndroid Build Coastguard Worker typedef forward_iterator_tag iterator_category; 6121*58b9f456SAndroid Build Coastguard Worker 6122*58b9f456SAndroid Build Coastguard Workerprivate: 6123*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __begin_; 6124*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __end_; 6125*58b9f456SAndroid Build Coastguard Worker const regex_type* __pregex_; 6126*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags_; 6127*58b9f456SAndroid Build Coastguard Worker value_type __match_; 6128*58b9f456SAndroid Build Coastguard Worker 6129*58b9f456SAndroid Build Coastguard Workerpublic: 6130*58b9f456SAndroid Build Coastguard Worker regex_iterator(); 6131*58b9f456SAndroid Build Coastguard Worker regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6132*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, 6133*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m 6134*58b9f456SAndroid Build Coastguard Worker = regex_constants::match_default); 6135*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6136*58b9f456SAndroid Build Coastguard Worker regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6137*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, 6138*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m 6139*58b9f456SAndroid Build Coastguard Worker = regex_constants::match_default) = delete; 6140*58b9f456SAndroid Build Coastguard Worker#endif 6141*58b9f456SAndroid Build Coastguard Worker 6142*58b9f456SAndroid Build Coastguard Worker bool operator==(const regex_iterator& __x) const; 6143*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6144*58b9f456SAndroid Build Coastguard Worker bool operator!=(const regex_iterator& __x) const {return !(*this == __x);} 6145*58b9f456SAndroid Build Coastguard Worker 6146*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6147*58b9f456SAndroid Build Coastguard Worker reference operator*() const {return __match_;} 6148*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6149*58b9f456SAndroid Build Coastguard Worker pointer operator->() const {return &__match_;} 6150*58b9f456SAndroid Build Coastguard Worker 6151*58b9f456SAndroid Build Coastguard Worker regex_iterator& operator++(); 6152*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6153*58b9f456SAndroid Build Coastguard Worker regex_iterator operator++(int) 6154*58b9f456SAndroid Build Coastguard Worker { 6155*58b9f456SAndroid Build Coastguard Worker regex_iterator __t(*this); 6156*58b9f456SAndroid Build Coastguard Worker ++(*this); 6157*58b9f456SAndroid Build Coastguard Worker return __t; 6158*58b9f456SAndroid Build Coastguard Worker } 6159*58b9f456SAndroid Build Coastguard Worker}; 6160*58b9f456SAndroid Build Coastguard Worker 6161*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6162*58b9f456SAndroid Build Coastguard Workerregex_iterator<_BidirectionalIterator, _CharT, _Traits>::regex_iterator() 6163*58b9f456SAndroid Build Coastguard Worker : __begin_(), __end_(), __pregex_(nullptr), __flags_(), __match_() 6164*58b9f456SAndroid Build Coastguard Worker{ 6165*58b9f456SAndroid Build Coastguard Worker} 6166*58b9f456SAndroid Build Coastguard Worker 6167*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6168*58b9f456SAndroid Build Coastguard Workerregex_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6169*58b9f456SAndroid Build Coastguard Worker regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6170*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, regex_constants::match_flag_type __m) 6171*58b9f456SAndroid Build Coastguard Worker : __begin_(__a), 6172*58b9f456SAndroid Build Coastguard Worker __end_(__b), 6173*58b9f456SAndroid Build Coastguard Worker __pregex_(&__re), 6174*58b9f456SAndroid Build Coastguard Worker __flags_(__m) 6175*58b9f456SAndroid Build Coastguard Worker{ 6176*58b9f456SAndroid Build Coastguard Worker _VSTD::regex_search(__begin_, __end_, __match_, *__pregex_, __flags_); 6177*58b9f456SAndroid Build Coastguard Worker} 6178*58b9f456SAndroid Build Coastguard Worker 6179*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6180*58b9f456SAndroid Build Coastguard Workerbool 6181*58b9f456SAndroid Build Coastguard Workerregex_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6182*58b9f456SAndroid Build Coastguard Worker operator==(const regex_iterator& __x) const 6183*58b9f456SAndroid Build Coastguard Worker{ 6184*58b9f456SAndroid Build Coastguard Worker if (__match_.empty() && __x.__match_.empty()) 6185*58b9f456SAndroid Build Coastguard Worker return true; 6186*58b9f456SAndroid Build Coastguard Worker if (__match_.empty() || __x.__match_.empty()) 6187*58b9f456SAndroid Build Coastguard Worker return false; 6188*58b9f456SAndroid Build Coastguard Worker return __begin_ == __x.__begin_ && 6189*58b9f456SAndroid Build Coastguard Worker __end_ == __x.__end_ && 6190*58b9f456SAndroid Build Coastguard Worker __pregex_ == __x.__pregex_ && 6191*58b9f456SAndroid Build Coastguard Worker __flags_ == __x.__flags_ && 6192*58b9f456SAndroid Build Coastguard Worker __match_[0] == __x.__match_[0]; 6193*58b9f456SAndroid Build Coastguard Worker} 6194*58b9f456SAndroid Build Coastguard Worker 6195*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6196*58b9f456SAndroid Build Coastguard Workerregex_iterator<_BidirectionalIterator, _CharT, _Traits>& 6197*58b9f456SAndroid Build Coastguard Workerregex_iterator<_BidirectionalIterator, _CharT, _Traits>::operator++() 6198*58b9f456SAndroid Build Coastguard Worker{ 6199*58b9f456SAndroid Build Coastguard Worker __flags_ |= regex_constants::__no_update_pos; 6200*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __start = __match_[0].second; 6201*58b9f456SAndroid Build Coastguard Worker if (__match_[0].first == __match_[0].second) 6202*58b9f456SAndroid Build Coastguard Worker { 6203*58b9f456SAndroid Build Coastguard Worker if (__start == __end_) 6204*58b9f456SAndroid Build Coastguard Worker { 6205*58b9f456SAndroid Build Coastguard Worker __match_ = value_type(); 6206*58b9f456SAndroid Build Coastguard Worker return *this; 6207*58b9f456SAndroid Build Coastguard Worker } 6208*58b9f456SAndroid Build Coastguard Worker else if (_VSTD::regex_search(__start, __end_, __match_, *__pregex_, 6209*58b9f456SAndroid Build Coastguard Worker __flags_ | regex_constants::match_not_null | 6210*58b9f456SAndroid Build Coastguard Worker regex_constants::match_continuous)) 6211*58b9f456SAndroid Build Coastguard Worker return *this; 6212*58b9f456SAndroid Build Coastguard Worker else 6213*58b9f456SAndroid Build Coastguard Worker ++__start; 6214*58b9f456SAndroid Build Coastguard Worker } 6215*58b9f456SAndroid Build Coastguard Worker __flags_ |= regex_constants::match_prev_avail; 6216*58b9f456SAndroid Build Coastguard Worker if (!_VSTD::regex_search(__start, __end_, __match_, *__pregex_, __flags_)) 6217*58b9f456SAndroid Build Coastguard Worker __match_ = value_type(); 6218*58b9f456SAndroid Build Coastguard Worker return *this; 6219*58b9f456SAndroid Build Coastguard Worker} 6220*58b9f456SAndroid Build Coastguard Worker 6221*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<const char*> cregex_iterator; 6222*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<const wchar_t*> wcregex_iterator; 6223*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<string::const_iterator> sregex_iterator; 6224*58b9f456SAndroid Build Coastguard Workertypedef regex_iterator<wstring::const_iterator> wsregex_iterator; 6225*58b9f456SAndroid Build Coastguard Worker 6226*58b9f456SAndroid Build Coastguard Worker// regex_token_iterator 6227*58b9f456SAndroid Build Coastguard Worker 6228*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, 6229*58b9f456SAndroid Build Coastguard Worker class _CharT = typename iterator_traits<_BidirectionalIterator>::value_type, 6230*58b9f456SAndroid Build Coastguard Worker class _Traits = regex_traits<_CharT> > 6231*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS regex_token_iterator 6232*58b9f456SAndroid Build Coastguard Worker{ 6233*58b9f456SAndroid Build Coastguard Workerpublic: 6234*58b9f456SAndroid Build Coastguard Worker typedef basic_regex<_CharT, _Traits> regex_type; 6235*58b9f456SAndroid Build Coastguard Worker typedef sub_match<_BidirectionalIterator> value_type; 6236*58b9f456SAndroid Build Coastguard Worker typedef ptrdiff_t difference_type; 6237*58b9f456SAndroid Build Coastguard Worker typedef const value_type* pointer; 6238*58b9f456SAndroid Build Coastguard Worker typedef const value_type& reference; 6239*58b9f456SAndroid Build Coastguard Worker typedef forward_iterator_tag iterator_category; 6240*58b9f456SAndroid Build Coastguard Worker 6241*58b9f456SAndroid Build Coastguard Workerprivate: 6242*58b9f456SAndroid Build Coastguard Worker typedef regex_iterator<_BidirectionalIterator, _CharT, _Traits> _Position; 6243*58b9f456SAndroid Build Coastguard Worker 6244*58b9f456SAndroid Build Coastguard Worker _Position __position_; 6245*58b9f456SAndroid Build Coastguard Worker const value_type* __result_; 6246*58b9f456SAndroid Build Coastguard Worker value_type __suffix_; 6247*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __n_; 6248*58b9f456SAndroid Build Coastguard Worker vector<int> __subs_; 6249*58b9f456SAndroid Build Coastguard Worker 6250*58b9f456SAndroid Build Coastguard Workerpublic: 6251*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(); 6252*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6253*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, int __submatch = 0, 6254*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6255*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default); 6256*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6257*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6258*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, int __submatch = 0, 6259*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6260*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default) = delete; 6261*58b9f456SAndroid Build Coastguard Worker#endif 6262*58b9f456SAndroid Build Coastguard Worker 6263*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6264*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, const vector<int>& __submatches, 6265*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6266*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default); 6267*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6268*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6269*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, const vector<int>& __submatches, 6270*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6271*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default) = delete; 6272*58b9f456SAndroid Build Coastguard Worker#endif 6273*58b9f456SAndroid Build Coastguard Worker 6274*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 6275*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6276*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, 6277*58b9f456SAndroid Build Coastguard Worker initializer_list<int> __submatches, 6278*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6279*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default); 6280*58b9f456SAndroid Build Coastguard Worker 6281*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6282*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6283*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, 6284*58b9f456SAndroid Build Coastguard Worker initializer_list<int> __submatches, 6285*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6286*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default) = delete; 6287*58b9f456SAndroid Build Coastguard Worker#endif 6288*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 6289*58b9f456SAndroid Build Coastguard Worker template <size_t _Np> 6290*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, 6291*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __b, 6292*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, 6293*58b9f456SAndroid Build Coastguard Worker const int (&__submatches)[_Np], 6294*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6295*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default); 6296*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 6297*58b9f456SAndroid Build Coastguard Worker template <std::size_t _Np> 6298*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, 6299*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __b, 6300*58b9f456SAndroid Build Coastguard Worker const regex_type&& __re, 6301*58b9f456SAndroid Build Coastguard Worker const int (&__submatches)[_Np], 6302*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m = 6303*58b9f456SAndroid Build Coastguard Worker regex_constants::match_default) = delete; 6304*58b9f456SAndroid Build Coastguard Worker#endif 6305*58b9f456SAndroid Build Coastguard Worker 6306*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(const regex_token_iterator&); 6307*58b9f456SAndroid Build Coastguard Worker regex_token_iterator& operator=(const regex_token_iterator&); 6308*58b9f456SAndroid Build Coastguard Worker 6309*58b9f456SAndroid Build Coastguard Worker bool operator==(const regex_token_iterator& __x) const; 6310*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6311*58b9f456SAndroid Build Coastguard Worker bool operator!=(const regex_token_iterator& __x) const {return !(*this == __x);} 6312*58b9f456SAndroid Build Coastguard Worker 6313*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6314*58b9f456SAndroid Build Coastguard Worker const value_type& operator*() const {return *__result_;} 6315*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6316*58b9f456SAndroid Build Coastguard Worker const value_type* operator->() const {return __result_;} 6317*58b9f456SAndroid Build Coastguard Worker 6318*58b9f456SAndroid Build Coastguard Worker regex_token_iterator& operator++(); 6319*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 6320*58b9f456SAndroid Build Coastguard Worker regex_token_iterator operator++(int) 6321*58b9f456SAndroid Build Coastguard Worker { 6322*58b9f456SAndroid Build Coastguard Worker regex_token_iterator __t(*this); 6323*58b9f456SAndroid Build Coastguard Worker ++(*this); 6324*58b9f456SAndroid Build Coastguard Worker return __t; 6325*58b9f456SAndroid Build Coastguard Worker } 6326*58b9f456SAndroid Build Coastguard Worker 6327*58b9f456SAndroid Build Coastguard Workerprivate: 6328*58b9f456SAndroid Build Coastguard Worker void __init(_BidirectionalIterator __a, _BidirectionalIterator __b); 6329*58b9f456SAndroid Build Coastguard Worker void __establish_result () { 6330*58b9f456SAndroid Build Coastguard Worker if (__subs_[__n_] == -1) 6331*58b9f456SAndroid Build Coastguard Worker __result_ = &__position_->prefix(); 6332*58b9f456SAndroid Build Coastguard Worker else 6333*58b9f456SAndroid Build Coastguard Worker __result_ = &(*__position_)[__subs_[__n_]]; 6334*58b9f456SAndroid Build Coastguard Worker } 6335*58b9f456SAndroid Build Coastguard Worker}; 6336*58b9f456SAndroid Build Coastguard Worker 6337*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6338*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6339*58b9f456SAndroid Build Coastguard Worker regex_token_iterator() 6340*58b9f456SAndroid Build Coastguard Worker : __result_(nullptr), 6341*58b9f456SAndroid Build Coastguard Worker __suffix_(), 6342*58b9f456SAndroid Build Coastguard Worker __n_(0) 6343*58b9f456SAndroid Build Coastguard Worker{ 6344*58b9f456SAndroid Build Coastguard Worker} 6345*58b9f456SAndroid Build Coastguard Worker 6346*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6347*58b9f456SAndroid Build Coastguard Workervoid 6348*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6349*58b9f456SAndroid Build Coastguard Worker __init(_BidirectionalIterator __a, _BidirectionalIterator __b) 6350*58b9f456SAndroid Build Coastguard Worker{ 6351*58b9f456SAndroid Build Coastguard Worker if (__position_ != _Position()) 6352*58b9f456SAndroid Build Coastguard Worker __establish_result (); 6353*58b9f456SAndroid Build Coastguard Worker else if (__subs_[__n_] == -1) 6354*58b9f456SAndroid Build Coastguard Worker { 6355*58b9f456SAndroid Build Coastguard Worker __suffix_.matched = true; 6356*58b9f456SAndroid Build Coastguard Worker __suffix_.first = __a; 6357*58b9f456SAndroid Build Coastguard Worker __suffix_.second = __b; 6358*58b9f456SAndroid Build Coastguard Worker __result_ = &__suffix_; 6359*58b9f456SAndroid Build Coastguard Worker } 6360*58b9f456SAndroid Build Coastguard Worker else 6361*58b9f456SAndroid Build Coastguard Worker __result_ = nullptr; 6362*58b9f456SAndroid Build Coastguard Worker} 6363*58b9f456SAndroid Build Coastguard Worker 6364*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6365*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6366*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6367*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, int __submatch, 6368*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m) 6369*58b9f456SAndroid Build Coastguard Worker : __position_(__a, __b, __re, __m), 6370*58b9f456SAndroid Build Coastguard Worker __n_(0), 6371*58b9f456SAndroid Build Coastguard Worker __subs_(1, __submatch) 6372*58b9f456SAndroid Build Coastguard Worker{ 6373*58b9f456SAndroid Build Coastguard Worker __init(__a, __b); 6374*58b9f456SAndroid Build Coastguard Worker} 6375*58b9f456SAndroid Build Coastguard Worker 6376*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6377*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6378*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6379*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, const vector<int>& __submatches, 6380*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m) 6381*58b9f456SAndroid Build Coastguard Worker : __position_(__a, __b, __re, __m), 6382*58b9f456SAndroid Build Coastguard Worker __n_(0), 6383*58b9f456SAndroid Build Coastguard Worker __subs_(__submatches) 6384*58b9f456SAndroid Build Coastguard Worker{ 6385*58b9f456SAndroid Build Coastguard Worker __init(__a, __b); 6386*58b9f456SAndroid Build Coastguard Worker} 6387*58b9f456SAndroid Build Coastguard Worker 6388*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 6389*58b9f456SAndroid Build Coastguard Worker 6390*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6391*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6392*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6393*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, 6394*58b9f456SAndroid Build Coastguard Worker initializer_list<int> __submatches, 6395*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m) 6396*58b9f456SAndroid Build Coastguard Worker : __position_(__a, __b, __re, __m), 6397*58b9f456SAndroid Build Coastguard Worker __n_(0), 6398*58b9f456SAndroid Build Coastguard Worker __subs_(__submatches) 6399*58b9f456SAndroid Build Coastguard Worker{ 6400*58b9f456SAndroid Build Coastguard Worker __init(__a, __b); 6401*58b9f456SAndroid Build Coastguard Worker} 6402*58b9f456SAndroid Build Coastguard Worker 6403*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 6404*58b9f456SAndroid Build Coastguard Worker 6405*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6406*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Np> 6407*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6408*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b, 6409*58b9f456SAndroid Build Coastguard Worker const regex_type& __re, 6410*58b9f456SAndroid Build Coastguard Worker const int (&__submatches)[_Np], 6411*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __m) 6412*58b9f456SAndroid Build Coastguard Worker : __position_(__a, __b, __re, __m), 6413*58b9f456SAndroid Build Coastguard Worker __n_(0), 6414*58b9f456SAndroid Build Coastguard Worker __subs_(__submatches, __submatches + _Np) 6415*58b9f456SAndroid Build Coastguard Worker{ 6416*58b9f456SAndroid Build Coastguard Worker __init(__a, __b); 6417*58b9f456SAndroid Build Coastguard Worker} 6418*58b9f456SAndroid Build Coastguard Worker 6419*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6420*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6421*58b9f456SAndroid Build Coastguard Worker regex_token_iterator(const regex_token_iterator& __x) 6422*58b9f456SAndroid Build Coastguard Worker : __position_(__x.__position_), 6423*58b9f456SAndroid Build Coastguard Worker __result_(__x.__result_), 6424*58b9f456SAndroid Build Coastguard Worker __suffix_(__x.__suffix_), 6425*58b9f456SAndroid Build Coastguard Worker __n_(__x.__n_), 6426*58b9f456SAndroid Build Coastguard Worker __subs_(__x.__subs_) 6427*58b9f456SAndroid Build Coastguard Worker{ 6428*58b9f456SAndroid Build Coastguard Worker if (__x.__result_ == &__x.__suffix_) 6429*58b9f456SAndroid Build Coastguard Worker __result_ = &__suffix_; 6430*58b9f456SAndroid Build Coastguard Worker else if ( __result_ != nullptr ) 6431*58b9f456SAndroid Build Coastguard Worker __establish_result (); 6432*58b9f456SAndroid Build Coastguard Worker} 6433*58b9f456SAndroid Build Coastguard Worker 6434*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6435*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>& 6436*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6437*58b9f456SAndroid Build Coastguard Worker operator=(const regex_token_iterator& __x) 6438*58b9f456SAndroid Build Coastguard Worker{ 6439*58b9f456SAndroid Build Coastguard Worker if (this != &__x) 6440*58b9f456SAndroid Build Coastguard Worker { 6441*58b9f456SAndroid Build Coastguard Worker __position_ = __x.__position_; 6442*58b9f456SAndroid Build Coastguard Worker if (__x.__result_ == &__x.__suffix_) 6443*58b9f456SAndroid Build Coastguard Worker __result_ = &__suffix_; 6444*58b9f456SAndroid Build Coastguard Worker else 6445*58b9f456SAndroid Build Coastguard Worker __result_ = __x.__result_; 6446*58b9f456SAndroid Build Coastguard Worker __suffix_ = __x.__suffix_; 6447*58b9f456SAndroid Build Coastguard Worker __n_ = __x.__n_; 6448*58b9f456SAndroid Build Coastguard Worker __subs_ = __x.__subs_; 6449*58b9f456SAndroid Build Coastguard Worker 6450*58b9f456SAndroid Build Coastguard Worker if ( __result_ != nullptr && __result_ != &__suffix_ ) 6451*58b9f456SAndroid Build Coastguard Worker __establish_result(); 6452*58b9f456SAndroid Build Coastguard Worker } 6453*58b9f456SAndroid Build Coastguard Worker return *this; 6454*58b9f456SAndroid Build Coastguard Worker} 6455*58b9f456SAndroid Build Coastguard Worker 6456*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6457*58b9f456SAndroid Build Coastguard Workerbool 6458*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>:: 6459*58b9f456SAndroid Build Coastguard Worker operator==(const regex_token_iterator& __x) const 6460*58b9f456SAndroid Build Coastguard Worker{ 6461*58b9f456SAndroid Build Coastguard Worker if (__result_ == nullptr && __x.__result_ == nullptr) 6462*58b9f456SAndroid Build Coastguard Worker return true; 6463*58b9f456SAndroid Build Coastguard Worker if (__result_ == &__suffix_ && __x.__result_ == &__x.__suffix_ && 6464*58b9f456SAndroid Build Coastguard Worker __suffix_ == __x.__suffix_) 6465*58b9f456SAndroid Build Coastguard Worker return true; 6466*58b9f456SAndroid Build Coastguard Worker if (__result_ == nullptr || __x.__result_ == nullptr) 6467*58b9f456SAndroid Build Coastguard Worker return false; 6468*58b9f456SAndroid Build Coastguard Worker if (__result_ == &__suffix_ || __x.__result_ == &__x.__suffix_) 6469*58b9f456SAndroid Build Coastguard Worker return false; 6470*58b9f456SAndroid Build Coastguard Worker return __position_ == __x.__position_ && __n_ == __x.__n_ && 6471*58b9f456SAndroid Build Coastguard Worker __subs_ == __x.__subs_; 6472*58b9f456SAndroid Build Coastguard Worker} 6473*58b9f456SAndroid Build Coastguard Worker 6474*58b9f456SAndroid Build Coastguard Workertemplate <class _BidirectionalIterator, class _CharT, class _Traits> 6475*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>& 6476*58b9f456SAndroid Build Coastguard Workerregex_token_iterator<_BidirectionalIterator, _CharT, _Traits>::operator++() 6477*58b9f456SAndroid Build Coastguard Worker{ 6478*58b9f456SAndroid Build Coastguard Worker _Position __prev = __position_; 6479*58b9f456SAndroid Build Coastguard Worker if (__result_ == &__suffix_) 6480*58b9f456SAndroid Build Coastguard Worker __result_ = nullptr; 6481*58b9f456SAndroid Build Coastguard Worker else if (static_cast<size_t>(__n_ + 1) < __subs_.size()) 6482*58b9f456SAndroid Build Coastguard Worker { 6483*58b9f456SAndroid Build Coastguard Worker ++__n_; 6484*58b9f456SAndroid Build Coastguard Worker __establish_result(); 6485*58b9f456SAndroid Build Coastguard Worker } 6486*58b9f456SAndroid Build Coastguard Worker else 6487*58b9f456SAndroid Build Coastguard Worker { 6488*58b9f456SAndroid Build Coastguard Worker __n_ = 0; 6489*58b9f456SAndroid Build Coastguard Worker ++__position_; 6490*58b9f456SAndroid Build Coastguard Worker if (__position_ != _Position()) 6491*58b9f456SAndroid Build Coastguard Worker __establish_result(); 6492*58b9f456SAndroid Build Coastguard Worker else 6493*58b9f456SAndroid Build Coastguard Worker { 6494*58b9f456SAndroid Build Coastguard Worker if (_VSTD::find(__subs_.begin(), __subs_.end(), -1) != __subs_.end() 6495*58b9f456SAndroid Build Coastguard Worker && __prev->suffix().length() != 0) 6496*58b9f456SAndroid Build Coastguard Worker { 6497*58b9f456SAndroid Build Coastguard Worker __suffix_.matched = true; 6498*58b9f456SAndroid Build Coastguard Worker __suffix_.first = __prev->suffix().first; 6499*58b9f456SAndroid Build Coastguard Worker __suffix_.second = __prev->suffix().second; 6500*58b9f456SAndroid Build Coastguard Worker __result_ = &__suffix_; 6501*58b9f456SAndroid Build Coastguard Worker } 6502*58b9f456SAndroid Build Coastguard Worker else 6503*58b9f456SAndroid Build Coastguard Worker __result_ = nullptr; 6504*58b9f456SAndroid Build Coastguard Worker } 6505*58b9f456SAndroid Build Coastguard Worker } 6506*58b9f456SAndroid Build Coastguard Worker return *this; 6507*58b9f456SAndroid Build Coastguard Worker} 6508*58b9f456SAndroid Build Coastguard Worker 6509*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<const char*> cregex_token_iterator; 6510*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<const wchar_t*> wcregex_token_iterator; 6511*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<string::const_iterator> sregex_token_iterator; 6512*58b9f456SAndroid Build Coastguard Workertypedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator; 6513*58b9f456SAndroid Build Coastguard Worker 6514*58b9f456SAndroid Build Coastguard Worker// regex_replace 6515*58b9f456SAndroid Build Coastguard Worker 6516*58b9f456SAndroid Build Coastguard Workertemplate <class _OutputIterator, class _BidirectionalIterator, 6517*58b9f456SAndroid Build Coastguard Worker class _Traits, class _CharT> 6518*58b9f456SAndroid Build Coastguard Worker_OutputIterator 6519*58b9f456SAndroid Build Coastguard Workerregex_replace(_OutputIterator __output_iter, 6520*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __first, _BidirectionalIterator __last, 6521*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, const _CharT* __fmt, 6522*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6523*58b9f456SAndroid Build Coastguard Worker{ 6524*58b9f456SAndroid Build Coastguard Worker typedef regex_iterator<_BidirectionalIterator, _CharT, _Traits> _Iter; 6525*58b9f456SAndroid Build Coastguard Worker _Iter __i(__first, __last, __e, __flags); 6526*58b9f456SAndroid Build Coastguard Worker _Iter __eof; 6527*58b9f456SAndroid Build Coastguard Worker if (__i == __eof) 6528*58b9f456SAndroid Build Coastguard Worker { 6529*58b9f456SAndroid Build Coastguard Worker if (!(__flags & regex_constants::format_no_copy)) 6530*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__first, __last, __output_iter); 6531*58b9f456SAndroid Build Coastguard Worker } 6532*58b9f456SAndroid Build Coastguard Worker else 6533*58b9f456SAndroid Build Coastguard Worker { 6534*58b9f456SAndroid Build Coastguard Worker sub_match<_BidirectionalIterator> __lm; 6535*58b9f456SAndroid Build Coastguard Worker for (size_t __len = char_traits<_CharT>::length(__fmt); __i != __eof; ++__i) 6536*58b9f456SAndroid Build Coastguard Worker { 6537*58b9f456SAndroid Build Coastguard Worker if (!(__flags & regex_constants::format_no_copy)) 6538*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__i->prefix().first, __i->prefix().second, __output_iter); 6539*58b9f456SAndroid Build Coastguard Worker __output_iter = __i->format(__output_iter, __fmt, __fmt + __len, __flags); 6540*58b9f456SAndroid Build Coastguard Worker __lm = __i->suffix(); 6541*58b9f456SAndroid Build Coastguard Worker if (__flags & regex_constants::format_first_only) 6542*58b9f456SAndroid Build Coastguard Worker break; 6543*58b9f456SAndroid Build Coastguard Worker } 6544*58b9f456SAndroid Build Coastguard Worker if (!(__flags & regex_constants::format_no_copy)) 6545*58b9f456SAndroid Build Coastguard Worker __output_iter = _VSTD::copy(__lm.first, __lm.second, __output_iter); 6546*58b9f456SAndroid Build Coastguard Worker } 6547*58b9f456SAndroid Build Coastguard Worker return __output_iter; 6548*58b9f456SAndroid Build Coastguard Worker} 6549*58b9f456SAndroid Build Coastguard Worker 6550*58b9f456SAndroid Build Coastguard Workertemplate <class _OutputIterator, class _BidirectionalIterator, 6551*58b9f456SAndroid Build Coastguard Worker class _Traits, class _CharT, class _ST, class _SA> 6552*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6553*58b9f456SAndroid Build Coastguard Worker_OutputIterator 6554*58b9f456SAndroid Build Coastguard Workerregex_replace(_OutputIterator __output_iter, 6555*58b9f456SAndroid Build Coastguard Worker _BidirectionalIterator __first, _BidirectionalIterator __last, 6556*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6557*58b9f456SAndroid Build Coastguard Worker const basic_string<_CharT, _ST, _SA>& __fmt, 6558*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6559*58b9f456SAndroid Build Coastguard Worker{ 6560*58b9f456SAndroid Build Coastguard Worker return _VSTD::regex_replace(__output_iter, __first, __last, __e, __fmt.c_str(), __flags); 6561*58b9f456SAndroid Build Coastguard Worker} 6562*58b9f456SAndroid Build Coastguard Worker 6563*58b9f456SAndroid Build Coastguard Workertemplate <class _Traits, class _CharT, class _ST, class _SA, class _FST, 6564*58b9f456SAndroid Build Coastguard Worker class _FSA> 6565*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6566*58b9f456SAndroid Build Coastguard Workerbasic_string<_CharT, _ST, _SA> 6567*58b9f456SAndroid Build Coastguard Workerregex_replace(const basic_string<_CharT, _ST, _SA>& __s, 6568*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6569*58b9f456SAndroid Build Coastguard Worker const basic_string<_CharT, _FST, _FSA>& __fmt, 6570*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6571*58b9f456SAndroid Build Coastguard Worker{ 6572*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT, _ST, _SA> __r; 6573*58b9f456SAndroid Build Coastguard Worker _VSTD::regex_replace(back_inserter(__r), __s.begin(), __s.end(), __e, 6574*58b9f456SAndroid Build Coastguard Worker __fmt.c_str(), __flags); 6575*58b9f456SAndroid Build Coastguard Worker return __r; 6576*58b9f456SAndroid Build Coastguard Worker} 6577*58b9f456SAndroid Build Coastguard Worker 6578*58b9f456SAndroid Build Coastguard Workertemplate <class _Traits, class _CharT, class _ST, class _SA> 6579*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6580*58b9f456SAndroid Build Coastguard Workerbasic_string<_CharT, _ST, _SA> 6581*58b9f456SAndroid Build Coastguard Workerregex_replace(const basic_string<_CharT, _ST, _SA>& __s, 6582*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, const _CharT* __fmt, 6583*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6584*58b9f456SAndroid Build Coastguard Worker{ 6585*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT, _ST, _SA> __r; 6586*58b9f456SAndroid Build Coastguard Worker _VSTD::regex_replace(back_inserter(__r), __s.begin(), __s.end(), __e, 6587*58b9f456SAndroid Build Coastguard Worker __fmt, __flags); 6588*58b9f456SAndroid Build Coastguard Worker return __r; 6589*58b9f456SAndroid Build Coastguard Worker} 6590*58b9f456SAndroid Build Coastguard Worker 6591*58b9f456SAndroid Build Coastguard Workertemplate <class _Traits, class _CharT, class _ST, class _SA> 6592*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6593*58b9f456SAndroid Build Coastguard Workerbasic_string<_CharT> 6594*58b9f456SAndroid Build Coastguard Workerregex_replace(const _CharT* __s, 6595*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6596*58b9f456SAndroid Build Coastguard Worker const basic_string<_CharT, _ST, _SA>& __fmt, 6597*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6598*58b9f456SAndroid Build Coastguard Worker{ 6599*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __r; 6600*58b9f456SAndroid Build Coastguard Worker _VSTD::regex_replace(back_inserter(__r), __s, 6601*58b9f456SAndroid Build Coastguard Worker __s + char_traits<_CharT>::length(__s), __e, 6602*58b9f456SAndroid Build Coastguard Worker __fmt.c_str(), __flags); 6603*58b9f456SAndroid Build Coastguard Worker return __r; 6604*58b9f456SAndroid Build Coastguard Worker} 6605*58b9f456SAndroid Build Coastguard Worker 6606*58b9f456SAndroid Build Coastguard Workertemplate <class _Traits, class _CharT> 6607*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 6608*58b9f456SAndroid Build Coastguard Workerbasic_string<_CharT> 6609*58b9f456SAndroid Build Coastguard Workerregex_replace(const _CharT* __s, 6610*58b9f456SAndroid Build Coastguard Worker const basic_regex<_CharT, _Traits>& __e, 6611*58b9f456SAndroid Build Coastguard Worker const _CharT* __fmt, 6612*58b9f456SAndroid Build Coastguard Worker regex_constants::match_flag_type __flags = regex_constants::match_default) 6613*58b9f456SAndroid Build Coastguard Worker{ 6614*58b9f456SAndroid Build Coastguard Worker basic_string<_CharT> __r; 6615*58b9f456SAndroid Build Coastguard Worker _VSTD::regex_replace(back_inserter(__r), __s, 6616*58b9f456SAndroid Build Coastguard Worker __s + char_traits<_CharT>::length(__s), __e, 6617*58b9f456SAndroid Build Coastguard Worker __fmt, __flags); 6618*58b9f456SAndroid Build Coastguard Worker return __r; 6619*58b9f456SAndroid Build Coastguard Worker} 6620*58b9f456SAndroid Build Coastguard Worker 6621*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD 6622*58b9f456SAndroid Build Coastguard Worker 6623*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS 6624*58b9f456SAndroid Build Coastguard Worker 6625*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_REGEX 6626