sub_match.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 510 行 · 第 1/2 页
HPP
510 行
template <class RandomAccessIterator>inline bool operator >= (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s){ return m.str().compare(s) >= 0; }template <class RandomAccessIterator>inline bool operator <= (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s){ return m.str().compare(s) <= 0; }// comparison to const charT* part 2:template <class RandomAccessIterator>inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) == 0; }template <class RandomAccessIterator>inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) != 0; }template <class RandomAccessIterator>inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) > 0; }template <class RandomAccessIterator>inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) < 0; }template <class RandomAccessIterator>inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) >= 0; }template <class RandomAccessIterator>inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(s) <= 0; }// comparison to const charT& part 1:template <class RandomAccessIterator>inline bool operator == (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) == 0; }template <class RandomAccessIterator>inline bool operator != (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) != 0; }template <class RandomAccessIterator>inline bool operator > (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) > 0; }template <class RandomAccessIterator>inline bool operator < (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) < 0; }template <class RandomAccessIterator>inline bool operator >= (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) >= 0; }template <class RandomAccessIterator>inline bool operator <= (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ return m.str().compare(0, m.length(), &s, 1) <= 0; }// comparison to const charT* part 2:template <class RandomAccessIterator>inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) == 0; }template <class RandomAccessIterator>inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) != 0; }template <class RandomAccessIterator>inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) > 0; }template <class RandomAccessIterator>inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) < 0; }template <class RandomAccessIterator>inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) >= 0; }template <class RandomAccessIterator>inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ return m.str().compare(0, m.length(), &s, 1) <= 0; }// addition operators:template <class RandomAccessIterator, class traits, class Allocator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> operator + (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, const sub_match<RandomAccessIterator>& m){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result; result.reserve(s.size() + m.length() + 1); return result.append(s).append(m.first, m.second);}template <class RandomAccessIterator, class traits, class Allocator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> operator + (const sub_match<RandomAccessIterator>& m, const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result; result.reserve(s.size() + m.length() + 1); return result.append(m.first, m.second).append(s);}#if !(defined(__GNUC__) && defined(BOOST_NO_STD_LOCALE))template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result; result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1); return result.append(s).append(m.first, m.second);}template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result; result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1); return result.append(m.first, m.second).append(s);}#else// worwaround versions:template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s, const sub_match<RandomAccessIterator>& m){ return s + m.str();}template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s){ return m.str() + s;}#endiftemplate <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s, const sub_match<RandomAccessIterator>& m){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result; result.reserve(m.length() + 2); return result.append(1, s).append(m.first, m.second);}template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (const sub_match<RandomAccessIterator>& m, typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result; result.reserve(m.length() + 2); return result.append(m.first, m.second).append(1, s);}template <class RandomAccessIterator>inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> operator + (const sub_match<RandomAccessIterator>& m1, const sub_match<RandomAccessIterator>& m2){ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result; result.reserve(m1.length() + m2.length() + 1); return result.append(m1.first, m1.second).append(m2.first, m2.second);}#ifndef BOOST_NO_STD_LOCALEtemplate <class charT, class traits, class RandomAccessIterator>std::basic_ostream<charT, traits>& operator << (std::basic_ostream<charT, traits>& os, const sub_match<RandomAccessIterator>& s){ return (os << s.str());}#elsetemplate <class RandomAccessIterator>std::ostream& operator << (std::ostream& os, const sub_match<RandomAccessIterator>& s){ return (os << s.str());}#endif#ifdef BOOST_OLD_REGEX_Hnamespace re_detail{template <class BidiIterator, class charT>int do_toi(BidiIterator i, BidiIterator j, char c, int radix){ std::string s(i, j); char* p; int result = std::strtol(s.c_str(), &p, radix); if(*p)raise_regex_exception("Bad sub-expression"); return result;}//// helper:template <class I, class charT>int do_toi(I& i, I j, charT c){ int result = 0; while((i != j) && (isdigit(*i))) { result = result*10 + (*i - '0'); ++i; } return result;}}template <class BidiIterator>sub_match<BidiIterator>::operator int()const{ BidiIterator i = first; BidiIterator j = second; if(i == j)raise_regex_exception("Bad sub-expression"); int neg = 1; if((i != j) && (*i == '-')) { neg = -1; ++i; } neg *= re_detail::do_toi(i, j, *i); if(i != j)raise_regex_exception("Bad sub-expression"); return neg;}template <class BidiIterator>sub_match<BidiIterator>::operator unsigned int()const{ BidiIterator i = first; BidiIterator j = second; if(i == j) raise_regex_exception("Bad sub-expression"); return re_detail::do_toi(i, j, *first);}#endif} // namespace boost#ifdef BOOST_MSVC#pragma warning(push)#pragma warning(disable: 4103)#endif#ifdef BOOST_HAS_ABI_HEADERS# include BOOST_ABI_SUFFIX#endif#ifdef BOOST_MSVC#pragma warning(pop)#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?