regex_traits.hpp
来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 816 行 · 第 1/2 页
HPP
816 行
} static char BOOST_REGEX_CALL translate(char c, bool icase) { return icase ? lower_case_map[(size_type)(uchar_type)c] : c; } static void BOOST_REGEX_CALL transform(std::string& out, const std::string& in); static void BOOST_REGEX_CALL transform_primary(std::string& out, const std::string& in); static bool BOOST_REGEX_CALL is_separator(char c) { return BOOST_REGEX_MAKE_BOOL((c == '\n') || (c == '\r')); } static bool BOOST_REGEX_CALL is_combining(char) { return false; } static bool BOOST_REGEX_CALL is_class(char c, boost::uint_fast32_t f) { return BOOST_REGEX_MAKE_BOOL(class_map[(size_type)(uchar_type)c] & f); } static int BOOST_REGEX_CALL toi(char c); static int BOOST_REGEX_CALL toi(const char*& first, const char* last, int radix); static boost::uint_fast32_t BOOST_REGEX_CALL lookup_classname(const char* first, const char* last) { std::string s(first, last); return do_lookup_class(s.c_str()); } static bool BOOST_REGEX_CALL lookup_collatename(std::string& buf, const char* first, const char* last) { std::string s(first, last); return do_lookup_collate(buf, s.c_str()); } static locale_type BOOST_REGEX_CALL imbue(locale_type l){ return l; } locale_type BOOST_REGEX_CALL getloc()const{ return locale_type(); } struct sentry { sentry(const w32_regex_traits<char>&) { w32_regex_traits<char>::update(); } ~sentry(){} operator void*() { return this; } }; static void BOOST_REGEX_CALL update(); w32_regex_traits(); ~w32_regex_traits();private: static w32_regex_traits<char> i;};#ifndef BOOST_NO_WREGEXtemplate<>class BOOST_REGEX_DECL w32_regex_traits<wchar_t> : public re_detail::w32_traits_base{ typedef re_detail::w32_traits_base base_type;public: typedef wchar_t char_type; typedef unsigned short uchar_type; typedef unsigned int size_type; typedef std::basic_string<wchar_t> string_type; typedef int locale_type; static std::size_t BOOST_REGEX_CALL length(const char_type* p) { return std::wcslen(p); } static unsigned int BOOST_REGEX_CALL syntax_type(size_type c); static wchar_t BOOST_REGEX_CALL translate(wchar_t c, bool icase) { return icase ? ((c < 256) ? re_detail::wide_lower_case_map[(uchar_type)c] : wtolower(c)) : c; } static void BOOST_REGEX_CALL transform(std::basic_string<wchar_t>& out, const std::basic_string<wchar_t>& in); static void BOOST_REGEX_CALL transform_primary(std::basic_string<wchar_t>& out, const std::basic_string<wchar_t>& in); static bool BOOST_REGEX_CALL is_separator(wchar_t c) { return BOOST_REGEX_MAKE_BOOL((c == L'\n') || (c == L'\r') || (c == (wchar_t)0x2028) || (c == (wchar_t)0x2029)); } static bool BOOST_REGEX_CALL is_combining(wchar_t c) { return re_detail::is_combining(c); } static bool BOOST_REGEX_CALL is_class(wchar_t c, boost::uint_fast32_t f) { return BOOST_REGEX_MAKE_BOOL(((uchar_type)c < 256) ? (wide_unicode_classes[(size_type)(uchar_type)c] & f) : do_iswclass(c, f)); } static int BOOST_REGEX_CALL toi(wchar_t c); static int BOOST_REGEX_CALL toi(const wchar_t*& first, const wchar_t* last, int radix); static boost::uint_fast32_t BOOST_REGEX_CALL lookup_classname(const wchar_t* first, const wchar_t* last); static bool BOOST_REGEX_CALL lookup_collatename(std::basic_string<wchar_t>& s, const wchar_t* first, const wchar_t* last); static locale_type BOOST_REGEX_CALL imbue(locale_type l){ return l; } locale_type BOOST_REGEX_CALL getloc()const{ return locale_type(); } struct sentry { sentry(const w32_regex_traits<wchar_t>&) { w32_regex_traits<wchar_t>::update(); } ~sentry(){} operator void*() { return this; } }; static void BOOST_REGEX_CALL update(); w32_regex_traits(); ~w32_regex_traits(); static std::size_t BOOST_REGEX_CALL strnarrow(char *s1, std::size_t len, const wchar_t *s2); static std::size_t BOOST_REGEX_CALL strwiden(wchar_t *s1, std::size_t len, const char *s2);private: static bool BOOST_REGEX_CALL do_iswclass(wchar_t c, boost::uint_fast32_t f); static bool BOOST_REGEX_CALL do_lookup_collate(std::basic_string<wchar_t>& out, const wchar_t* first, const wchar_t* last); static w32_regex_traits<wchar_t> init_; static wchar_t BOOST_REGEX_CALL wtolower(wchar_t c); static unsigned short wide_unicode_classes[];};#endif // Wide strings#endif // Win32#if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)} // namspace boost#ifdef __BORLANDC__ #pragma option pop#endif#include <locale>#ifdef __BORLANDC__ #pragma option push -a4 -b -Ve -pc#endifnamespace boost{namespace re_detail{template <class charT>struct message_data;template <>struct message_data<char>;template <>struct message_data<wchar_t>;struct BOOST_REGEX_DECL cpp_regex_traits_base : public regex_traits_base{ enum char_class_type { char_class_none = 0, char_class_alnum = std::ctype_base::alnum, char_class_alpha = std::ctype_base::alpha, char_class_cntrl = std::ctype_base::cntrl, char_class_digit = std::ctype_base::digit, char_class_graph = std::ctype_base::graph, char_class_lower = std::ctype_base::lower, char_class_print = std::ctype_base::print, char_class_punct = std::ctype_base::punct, char_class_space = std::ctype_base::space, char_class_upper = std::ctype_base::upper, char_class_xdigit = std::ctype_base::xdigit, char_class_blank = 1<<12, char_class_underscore = 1<<13, char_class_word = std::ctype_base::alnum | char_class_underscore, char_class_unicode = 1<<14, char_class_all_base = char_class_alnum | char_class_alpha | char_class_cntrl | char_class_digit | char_class_graph | char_class_lower | char_class_print | char_class_punct | char_class_space | char_class_upper | char_class_xdigit }; static std::string BOOST_REGEX_CALL set_message_catalogue(const std::string& s);protected: static char regex_message_cat[BOOST_REGEX_MAX_PATH];};} // namespace re_detailtemplate <class charT>class cpp_regex_traits;template<>class BOOST_REGEX_DECL cpp_regex_traits<char> : public re_detail::cpp_regex_traits_base{ typedef re_detail::cpp_regex_traits_base base_type;private: re_detail::message_data<char>* pmd; const unsigned char* psyntax; char* lower_map; const std::ctype<char>* pctype; const std::collate<char>* pcollate; std::locale locale_inst; unsigned sort_type; char sort_delim; cpp_regex_traits(const cpp_regex_traits&); cpp_regex_traits& operator=(const cpp_regex_traits&);public: typedef char char_type; typedef unsigned char uchar_type; typedef unsigned int size_type; typedef std::string string_type; typedef std::locale locale_type; cpp_regex_traits(); ~cpp_regex_traits(); void swap(cpp_regex_traits&); static std::size_t BOOST_REGEX_CALL length(const char_type* p) { return std::strlen(p); } unsigned int BOOST_REGEX_CALL syntax_type(size_type c)const { return psyntax[c]; } char BOOST_REGEX_CALL translate(char c, bool icase)const { return icase ? lower_map[(size_type)(uchar_type)c] : c; } void BOOST_REGEX_CALL transform(std::string& out, const std::string& in)const { out = pcollate->transform(in.c_str(), in.c_str() + in.size()).c_str(); } void BOOST_REGEX_CALL transform_primary(std::string& out, const std::string& in)const; static bool BOOST_REGEX_CALL is_separator(char c) { return BOOST_REGEX_MAKE_BOOL((c == '\n') || (c == '\r')); } static bool BOOST_REGEX_CALL is_combining(char) { return false; } bool BOOST_REGEX_CALL is_class(char c, boost::uint_fast32_t f)const { if(pctype->is((std::ctype<char>::mask)(f & char_class_all_base), c)) return true; if((f & char_class_underscore) && (c == '_')) return true; if((f & char_class_blank) && ((c == ' ') || (c == '\t'))) return true; return false; } int BOOST_REGEX_CALL toi(char c)const; int BOOST_REGEX_CALL toi(const char*& first, const char* last, int radix)const; boost::uint_fast32_t BOOST_REGEX_CALL lookup_classname(const char* first, const char* last)const; bool BOOST_REGEX_CALL lookup_collatename(std::string& s, const char* first, const char* last)const; std::string BOOST_REGEX_CALL error_string(unsigned id)const; locale_type BOOST_REGEX_CALL imbue(locale_type l); locale_type BOOST_REGEX_CALL getloc()const{ return locale_inst; } struct sentry { sentry(const cpp_regex_traits<char>&){} operator void*() { return this; } };};#ifndef BOOST_NO_WREGEXtemplate<>class BOOST_REGEX_DECL cpp_regex_traits<wchar_t> : public re_detail::cpp_regex_traits_base{ typedef re_detail::cpp_regex_traits_base base_type;public: typedef wchar_t char_type; typedef unsigned short uchar_type; typedef unsigned int size_type; typedef std::basic_string<wchar_t> string_type; typedef std::locale locale_type;private: re_detail::message_data<wchar_t>* pmd; const unsigned char* psyntax; wchar_t* lower_map; const std::ctype<wchar_t>* pctype; const std::collate<wchar_t>* pcollate; const std::codecvt<wchar_t, char, std::mbstate_t>* pcdv; std::locale locale_inst; unsigned int BOOST_REGEX_CALL do_syntax_type(size_type c)const; unsigned sort_type; wchar_t sort_delim; cpp_regex_traits(const cpp_regex_traits&); cpp_regex_traits& operator=(const cpp_regex_traits&);public: static std::size_t BOOST_REGEX_CALL length(const char_type* p) { return std::wcslen(p); } unsigned int BOOST_REGEX_CALL syntax_type(size_type c)const { return (c < UCHAR_MAX) ? psyntax[c] : do_syntax_type(c); } wchar_t BOOST_REGEX_CALL translate(wchar_t c, bool icase)const { return icase ? (((uchar_type)c) <= UCHAR_MAX) ? lower_map[c] : pctype->tolower(c) : c; } void BOOST_REGEX_CALL transform(std::basic_string<wchar_t>& out, const std::basic_string<wchar_t>& in)const { out = pcollate->transform(in.c_str(), in.c_str() + in.size()); } void BOOST_REGEX_CALL transform_primary(std::basic_string<wchar_t>& out, const std::basic_string<wchar_t>& in)const; static bool BOOST_REGEX_CALL is_separator(wchar_t c) { return BOOST_REGEX_MAKE_BOOL((c == L'\n') || (c == L'\r') || (c == (wchar_t)0x2028) || (c == (wchar_t)0x2029)); } static bool BOOST_REGEX_CALL is_combining(wchar_t c) { return re_detail::is_combining(c); } bool BOOST_REGEX_CALL is_class(wchar_t c, boost::uint_fast32_t f)const { if(pctype->is((std::ctype<wchar_t>::mask)(f & char_class_all_base), c)) return true; if((f & char_class_underscore) && (c == '_')) return true; if((f & char_class_blank) && ((c == ' ') || (c == '\t'))) return true; if((f & char_class_unicode) && ((uchar_type)c > (uchar_type)255)) return true; return false; } int BOOST_REGEX_CALL toi(wchar_t c)const; int BOOST_REGEX_CALL toi(const wchar_t*& first, const wchar_t* last, int radix)const; boost::uint_fast32_t BOOST_REGEX_CALL lookup_classname(const wchar_t* first, const wchar_t* last)const; bool BOOST_REGEX_CALL lookup_collatename(std::basic_string<wchar_t>& s, const wchar_t* first, const wchar_t* last)const; std::string BOOST_REGEX_CALL error_string(unsigned id)const; cpp_regex_traits(); ~cpp_regex_traits(); locale_type BOOST_REGEX_CALL imbue(locale_type l); locale_type BOOST_REGEX_CALL getloc()const{ return locale_inst; } std::size_t BOOST_REGEX_CALL strwiden(wchar_t *s1, std::size_t len, const char *s2)const; void swap(cpp_regex_traits&); struct sentry { sentry(const cpp_regex_traits<wchar_t>&){} operator void*() { return this; } };};#endif // BOOST_NO_WREGEX#endif // BOOST_NO_STD_LOCALE#ifdef BOOST_REGEX_USE_WIN32_LOCALEtemplate <class charT>class regex_traits : public w32_regex_traits<charT>{};#elif defined(BOOST_REGEX_USE_C_LOCALE)template <class charT>class regex_traits : public c_regex_traits<charT>{};#elif defined(BOOST_REGEX_USE_CPP_LOCALE)template <class charT>class regex_traits : public cpp_regex_traits<charT>{};#else#error No default localisation model defined#endif#ifdef __BORLANDC__ #pragma option pop#endif} // namespace boost#endif // include
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?