basic_regex.hpp

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

HPP
653
字号
   basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p)   {      return assign(p.data(), p.data() + p.size(), regex_constants::normal);   }   basic_regex& BOOST_REGEX_CALL assign(       const std::basic_string<charT>& s,       flag_type f = regex_constants::normal)   {      return assign(s.data(), s.data() + s.size(), f);   }#endif   //   // locale:   locale_type BOOST_REGEX_CALL imbue(locale_type l);   locale_type BOOST_REGEX_CALL getloc()const   {       return m_pimpl.get() ? m_pimpl->getloc() : locale_type();    }   //   // getflags:   // retained for backwards compatibility only, "flags"   // is now the preferred name:   flag_type BOOST_REGEX_CALL getflags()const   {       return flags();   }   flag_type BOOST_REGEX_CALL flags()const   {       return m_pimpl.get() ? m_pimpl->flags() : 0;   }   //   // str:   std::basic_string<charT> BOOST_REGEX_CALL str()const   {      return m_pimpl.get() ? m_pimpl->str() : std::basic_string<charT>();   }   //   // begin, end:   const_iterator BOOST_REGEX_CALL begin()const   {       return (m_pimpl.get() ? m_pimpl->begin() : 0);    }   const_iterator BOOST_REGEX_CALL end()const   {       return (m_pimpl.get() ? m_pimpl->end() : 0);    }   //   // swap:   void BOOST_REGEX_CALL swap(basic_regex& that)throw()   {      m_pimpl.swap(that.m_pimpl);   }   //   // size:   size_type BOOST_REGEX_CALL size()const   {       return (m_pimpl.get() ? m_pimpl->size() : 0);    }   //   // max_size:   size_type BOOST_REGEX_CALL max_size()const   {       return UINT_MAX;    }   //   // empty:   bool BOOST_REGEX_CALL empty()const   {       return (m_pimpl.get() ? 0 != m_pimpl->status() : true);    }   size_type BOOST_REGEX_CALL mark_count()const    {       return (m_pimpl.get() ? m_pimpl->mark_count() : 0);    }   int status()const   {      return (m_pimpl.get() ? m_pimpl->status() : regex_constants::error_empty);   }   int BOOST_REGEX_CALL compare(const basic_regex& that) const   {      if(m_pimpl.get() == that.m_pimpl.get())         return 0;      if(!m_pimpl.get())         return -1;      if(!that.m_pimpl.get())         return 1;      if(status() != that.status())         return status() - that.status();      if(flags() != that.flags())         return flags() - that.flags();      return str().compare(that.str());   }   bool BOOST_REGEX_CALL operator==(const basic_regex& e)const   {       return compare(e) == 0;    }   bool BOOST_REGEX_CALL operator != (const basic_regex& e)const   {       return compare(e) != 0;    }   bool BOOST_REGEX_CALL operator<(const basic_regex& e)const   {       return compare(e) < 0;    }   bool BOOST_REGEX_CALL operator>(const basic_regex& e)const   {       return compare(e) > 0;    }   bool BOOST_REGEX_CALL operator<=(const basic_regex& e)const   {       return compare(e) <= 0;    }   bool BOOST_REGEX_CALL operator>=(const basic_regex& e)const   {       return compare(e) >= 0;    }   //   // The following are deprecated as public interfaces   // but are available for compatibility with earlier versions.   const charT* BOOST_REGEX_CALL expression()const    {       return (m_pimpl.get() && !m_pimpl->status() ? m_pimpl->expression() : 0);    }   unsigned int BOOST_REGEX_CALL set_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal)   {      assign(p1, p2, f | regex_constants::no_except);      return status();   }   unsigned int BOOST_REGEX_CALL set_expression(const charT* p, flag_type f = regex_constants::normal)    {       assign(p, f | regex_constants::no_except);       return status();   }   unsigned int BOOST_REGEX_CALL error_code()const   {      return status();   }   //   // private access methods:   //   const re_detail::re_syntax_base* get_first_state()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->get_first_state();   }   unsigned get_restart_type()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->get_restart_type();   }   const unsigned char* get_map()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->get_map();   }   const ::boost::regex_traits_wrapper<traits>& get_traits()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->get_traits();   }   bool can_be_null()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->can_be_null();   }   const re_detail::regex_data<charT, traits>& get_data()const   {      BOOST_ASSERT(0 != m_pimpl.get());      return m_pimpl->get_data();   }private:   shared_ptr<re_detail::basic_regex_implementation<charT, traits> > m_pimpl;};//// out of line members;// these are the only members that mutate the basic_regex object,// and are designed to provide the strong exception guarentee// (in the event of a throw, the state of the object remains unchanged).//template <class charT, class traits>basic_regex<charT, traits>& basic_regex<charT, traits>::do_assign(const charT* p1,                        const charT* p2,                        flag_type f){   shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp;   if(!m_pimpl.get())   {      temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>());   }   else   {      temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits));   }   temp->assign(p1, p2, f);   temp.swap(m_pimpl);   return *this;}template <class charT, class traits>typename basic_regex<charT, traits>::locale_type BOOST_REGEX_CALL basic_regex<charT, traits>::imbue(locale_type l){    shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp(new re_detail::basic_regex_implementation<charT, traits>());   locale_type result = temp->imbue(l);   temp.swap(m_pimpl);   return result;}//// non-members://template <class charT, class traits>void swap(basic_regex<charT, traits>& e1, basic_regex<charT, traits>& e2){   e1.swap(e2);}#ifndef BOOST_NO_STD_LOCALEtemplate <class charT, class traits, class traits2>std::basic_ostream<charT, traits>&    operator << (std::basic_ostream<charT, traits>& os,                 const basic_regex<charT, traits2>& e){   return (os << e.str());}#elsetemplate <class traits>std::ostream& operator << (std::ostream& os, const basic_regex<char, traits>& e){   return (os << e.str());}#endif//// class reg_expression:// this is provided for backwards compatibility only,// it is deprecated, no not use!//#ifdef BOOST_REGEX_NO_FWDtemplate <class charT, class traits = regex_traits<charT> >#elsetemplate <class charT, class traits >#endifclass reg_expression : public basic_regex<charT, traits>{public:   typedef typename basic_regex<charT, traits>::flag_type flag_type;   typedef typename basic_regex<charT, traits>::size_type size_type;   explicit reg_expression(){}   explicit reg_expression(const charT* p, flag_type f = regex_constants::normal)      : basic_regex<charT, traits>(p, f){}   reg_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal)      : basic_regex<charT, traits>(p1, p2, f){}   reg_expression(const charT* p, size_type len, flag_type f)      : basic_regex<charT, traits>(p, len, f){}   reg_expression(const reg_expression& that)      : basic_regex<charT, traits>(that) {}   ~reg_expression(){}   reg_expression& BOOST_REGEX_CALL operator=(const reg_expression& that)   {      return this->assign(that);   }#if !defined(BOOST_NO_MEMBER_TEMPLATES)   template <class ST, class SA>   explicit reg_expression(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal)   : basic_regex<charT, traits>(p, f)   {    }   template <class InputIterator>   reg_expression(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal)   : basic_regex<charT, traits>(arg_first, arg_last, f)   {   }   template <class ST, class SA>   reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT, ST, SA>& p)   {      this->assign(p);      return *this;   }#else   explicit reg_expression(const std::basic_string<charT>& p, flag_type f = regex_constants::normal)   : basic_regex<charT, traits>(p, f)   {    }   reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p)   {      this->assign(p);      return *this;   }#endif};#ifdef BOOST_MSVC#pragma warning (pop)#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 + -
显示快捷键?