primitives.ipp

来自「CGAL is a collaborative effort of severa」· IPP 代码 · 共 377 行

IPP
377
字号
/*=============================================================================    Copyright (c) 1998-2003 Joel de Guzman    Copyright (c) 2003 Martin Wille    http://spirit.sourceforge.net/    Use, modification and distribution is subject to the Boost Software    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at    http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#if !defined(BOOST_SPIRIT_PRIMITIVES_IPP)#define BOOST_SPIRIT_PRIMITIVES_IPP// This should eventually go to a config file.#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(_STLPORT_VERSION)#  ifndef BOOST_SPIRIT_NO_CHAR_TRAITS#    define BOOST_SPIRIT_NO_CHAR_TRAITS#  endif#endif#include <cctype>#if !defined(BOOST_NO_CWCTYPE)#include <cwctype>#endif#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS#  include <string> // char_traits#endif#if defined(BOOST_MSVC)#  pragma warning(disable:4800)#endifnamespace boost { namespace spirit {    template <typename DrivedT> struct char_parser;    namespace impl     {        template <typename IteratorT>        inline IteratorT        get_last(IteratorT first)        {            while (*first)                first++;            return first;        }        template<            typename RT,            typename IteratorT,            typename ScannerT>        inline RT        string_parser_parse(            IteratorT str_first,            IteratorT str_last,            ScannerT& scan)        {            typedef typename ScannerT::iterator_t iterator_t;            iterator_t saved = scan.first;            std::size_t slen = str_last - str_first;                while (str_first != str_last)            {                if (scan.at_end() || (*str_first != *scan))                    return scan.no_match();                ++str_first;                ++scan;            }                return scan.create_match(slen, nil_t(), saved, scan.first);        }    ///////////////////////////////////////////////////////////////////////////    //    // Conversion from char_type to int_type    //    ///////////////////////////////////////////////////////////////////////////#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS#  define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE std#else        template <typename CharT>        struct char_traits        {            typedef CharT int_type;            typedef CharT char_type;        };        template<>        struct char_traits<char>        {            typedef int int_type;            typedef char char_type;                static char_type             to_char_type(int_type c)            {                 return static_cast<char_type>(c);             }                static int             to_int_type(char c)            {                 return static_cast<unsigned char>(c);             }        };        template<>        struct char_traits<unsigned char>        {            typedef int int_type;            typedef unsigned char char_type;                static char_type             to_char_type(int_type c)            {                 return static_cast<char_type>(c);             }                static int             to_int_type(unsigned char c)            {                 return c;             }        };#  define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE impl#  ifndef BOOST_NO_CWCHAR        template<>        struct char_traits<wchar_t>        {            typedef wint_t int_type;            typedef wchar_t char_type;                        static char_type             to_char_type(int_type c)            {                 return static_cast<char_type>(c);             }                static wint_t             to_int_type(wchar_t c)            {                 return c;             }        };#  endif#endif // BOOST_SPIRIT_NO_CHAR_TRAITS        template <typename CharT>        inline typename        BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE::char_traits<CharT>::int_type        to_int_type(CharT c)        {            return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE                ::char_traits<CharT>::to_int_type(c);        }            template <typename CharT>        inline CharT        to_char_type(typename             BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE::char_traits<CharT>::int_type c)        {            return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE                ::char_traits<CharT>::to_char_type(c);        }        ///////////////////////////////////////////////////////////////////////        //        //  Convenience functions        //        ///////////////////////////////////////////////////////////////////////        inline bool         isalnum_(char c)        {             using namespace std;             return isalnum(to_int_type(c));         }            inline bool         isalpha_(char c)        {             using namespace std;             return isalpha(to_int_type(c));         }            inline bool         iscntrl_(char c)        {             using namespace std;             return iscntrl(to_int_type(c));         }            inline bool         isdigit_(char c)        {             using namespace std;             return isdigit(to_int_type(c));         }            inline bool         isgraph_(char c)        {             using namespace std;             return isgraph(to_int_type(c));         }            inline bool         islower_(char c)        {             using namespace std;             return islower(to_int_type(c));         }            inline bool         isprint_(char c)        {             using namespace std;             return isprint(to_int_type(c));         }            inline bool         ispunct_(char c)        {             using namespace std;             return ispunct(to_int_type(c));         }            inline bool         isspace_(char c)        {             using namespace std;             return isspace(to_int_type(c));         }            inline bool         isupper_(char c)        {             using namespace std;             return isupper(to_int_type(c)); }            inline bool         isxdigit_(char c)        {             using namespace std;             return isxdigit(to_int_type(c));         }            inline bool         isblank_(char c)        {             return (c == ' ' || c == '\t');         }                inline char         tolower_(char c)        {             using namespace std;             return to_char_type<char>(tolower(to_int_type(c)));         }            inline char         toupper_(char c)        {             using namespace std;             return to_char_type<char>(toupper(to_int_type(c)));         }#if !defined(BOOST_NO_CWCTYPE)        inline bool         isalnum_(wchar_t c)        {             using namespace std;             return iswalnum(to_int_type(c));         }            inline bool         isalpha_(wchar_t c)        {             using namespace std;             return iswalpha(to_int_type(c));         }            inline bool         iscntrl_(wchar_t c)        {             using namespace std;             return iswcntrl(to_int_type(c));         }            inline bool         isdigit_(wchar_t c)        {             using namespace std;             return iswdigit(to_int_type(c));         }            inline bool         isgraph_(wchar_t c)        {             using namespace std;             return iswgraph(to_int_type(c));         }            inline bool         islower_(wchar_t c)        {             using namespace std;             return iswlower(to_int_type(c));         }            inline bool         isprint_(wchar_t c)        {             using namespace std;             return iswprint(to_int_type(c));         }            inline bool         ispunct_(wchar_t c)        {             using namespace std;             return iswpunct(to_int_type(c));         }            inline bool         isspace_(wchar_t c)        {             using namespace std;             return iswspace(to_int_type(c));         }            inline bool         isupper_(wchar_t c)        {             using namespace std;             return iswupper(to_int_type(c));         }            inline bool         isxdigit_(wchar_t c)        {             using namespace std;             return iswxdigit(to_int_type(c));         }            inline bool         isblank_(wchar_t c)        {             return (c == L' ' || c == L'\t');         }             inline wchar_t         tolower_(wchar_t c)        {             using namespace std;             return to_char_type<wchar_t>(towlower(to_int_type(c)));         }            inline wchar_t         toupper_(wchar_t c)        {             using namespace std;             return to_char_type<wchar_t>(towupper(to_int_type(c)));         }#endif // !defined(BOOST_NO_CWCTYPE)}}} // namespace boost::spirit::impl#endif

⌨️ 快捷键说明

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