u32regex_token_iterator.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 378 行 · 第 1/2 页

HPP
378
字号
   }   u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,                         const std::vector<int>& submatches, match_flag_type m = match_default)                        : pdata(new impl(&re, b, submatches, m))   {      if(!pdata->init(a))         pdata.reset();   }#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)      // can't reliably get this to work....#elif (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\      || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \      || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \      || BOOST_WORKAROUND(__HP_aCC, < 60700)   template <class T>   u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,                        const T& submatches, match_flag_type m = match_default)                        : pdata(new impl(&re, b, submatches, m))   {      if(!pdata->init(a))         pdata.reset();   }#else   template <std::size_t N>   u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,                        const int (&submatches)[N], match_flag_type m = match_default)                        : pdata(new impl(&re, b, submatches, m))   {      if(!pdata->init(a))         pdata.reset();   }#endif   u32regex_token_iterator(const u32regex_token_iterator& that)      : pdata(that.pdata) {}   u32regex_token_iterator& operator=(const u32regex_token_iterator& that)   {      pdata = that.pdata;      return *this;   }   bool operator==(const u32regex_token_iterator& that)const   {       if((pdata.get() == 0) || (that.pdata.get() == 0))         return pdata.get() == that.pdata.get();      return pdata->compare(*(that.pdata.get()));    }   bool operator!=(const u32regex_token_iterator& that)const   { return !(*this == that); }   const value_type& operator*()const   { return pdata->get(); }   const value_type* operator->()const   { return &(pdata->get()); }   u32regex_token_iterator& operator++()   {      cow();      if(0 == pdata->next())      {         pdata.reset();      }      return *this;   }   u32regex_token_iterator operator++(int)   {      u32regex_token_iterator result(*this);      ++(*this);      return result;   }private:   pimpl pdata;   void cow()   {      // copy-on-write      if(pdata.get() && !pdata.unique())      {         pdata.reset(new impl(*(pdata.get())));      }   }};typedef u32regex_token_iterator<const char*> utf8regex_token_iterator;typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator;typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator;// construction from an integral sub_match state_id:inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);}#ifndef BOOST_NO_WREGEXinline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);}#endif#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);}#endiftemplate <class charT, class Traits, class Alloc>inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default){   typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;   return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);}inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);}#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)// construction from a reference to an array:template <std::size_t N>inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);}#ifndef BOOST_NO_WREGEXtemplate <std::size_t N>inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);}#endif#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)template <std::size_t N>inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);}#endiftemplate <class charT, class Traits, class Alloc, std::size_t N>inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default){   typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;   return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);}template <std::size_t N>inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);}#endif // BOOST_MSVC < 1300// construction from a vector of sub_match state_id's:inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);}#ifndef BOOST_NO_WREGEXinline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);}#endif#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);}#endiftemplate <class charT, class Traits, class Alloc>inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default){   typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;   return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);}inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default){   return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);}#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)#  pragma warning(pop)#endif#ifdef BOOST_HAS_ABI_HEADERS#  include BOOST_ABI_SUFFIX#endif} // namespace boost#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?