diff options
author | Kevin Smith <git@kismith.co.uk> | 2013-01-12 18:41:34 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2013-01-13 10:36:26 (GMT) |
commit | f3bc816af1b0d61452de973963e453bf3b3f95a2 (patch) | |
tree | e895f8afa3580e6cff6f5ad2017d45bf147a17c2 /3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp | |
parent | 188fc285c6555eadd3c9d50ab8a94adcade78d89 (diff) | |
download | swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.zip swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.tar.bz2 |
Adding in the spirit Boost stuff
Change-Id: I4f127ce61667243b64081b0aa309028d5077045f
Diffstat (limited to '3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp new file mode 100644 index 0000000..99c918c --- /dev/null +++ b/3rdParty/Boost/src/boost/spirit/home/support/char_encoding/standard_wide.hpp @@ -0,0 +1,182 @@ +/*============================================================================= + Copyright (c) 2001-2011 Hartmut Kaiser + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under 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_STANDARD_WIDE_NOVEMBER_10_2006_0913AM) +#define BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM + +#if defined(_MSC_VER) +#pragma once +#endif + +#include <cwctype> +#include <string> + +#include <boost/cstdint.hpp> +#include <boost/spirit/home/support/assert_msg.hpp> + +namespace boost { namespace spirit { namespace traits +{ + template <std::size_t N> + struct wchar_t_size + { + BOOST_SPIRIT_ASSERT_MSG(N == 1 || N == 2 || N == 4, + not_supported_size_of_wchar_t, ()); + }; + + template <> struct wchar_t_size<1> { enum { mask = 0xff }; }; + template <> struct wchar_t_size<2> { enum { mask = 0xffff }; }; + template <> struct wchar_t_size<4> { enum { mask = 0xffffffff }; }; + +}}} + +namespace boost { namespace spirit { namespace char_encoding +{ + /////////////////////////////////////////////////////////////////////////// + // Test characters for specified conditions (using std wchar_t functions) + /////////////////////////////////////////////////////////////////////////// + + struct standard_wide + { + typedef wchar_t char_type; + + template <typename Char> + static typename std::char_traits<Char>::int_type + to_int_type(Char ch) + { + return std::char_traits<Char>::to_int_type(ch); + } + + template <typename Char> + static Char + to_char_type(typename std::char_traits<Char>::int_type ch) + { + return std::char_traits<Char>::to_char_type(ch); + } + + static bool + ischar(int ch) + { + // we have to watch out for sign extensions (casting is there to + // silence certain compilers complaining about signed/unsigned + // mismatch) + return ( + std::size_t(0) == + std::size_t(ch & ~traits::wchar_t_size<sizeof(wchar_t)>::mask) || + std::size_t(~0) == + std::size_t(ch | traits::wchar_t_size<sizeof(wchar_t)>::mask) + ) ? true : false; // any wchar_t, but no other bits set + } + + static bool + isalnum(wchar_t ch) + { + using namespace std; + return iswalnum(to_int_type(ch)) ? true : false; + } + + static bool + isalpha(wchar_t ch) + { + using namespace std; + return iswalpha(to_int_type(ch)) ? true : false; + } + + static bool + iscntrl(wchar_t ch) + { + using namespace std; + return iswcntrl(to_int_type(ch)) ? true : false; + } + + static bool + isdigit(wchar_t ch) + { + using namespace std; + return iswdigit(to_int_type(ch)) ? true : false; + } + + static bool + isgraph(wchar_t ch) + { + using namespace std; + return iswgraph(to_int_type(ch)) ? true : false; + } + + static bool + islower(wchar_t ch) + { + using namespace std; + return iswlower(to_int_type(ch)) ? true : false; + } + + static bool + isprint(wchar_t ch) + { + using namespace std; + return iswprint(to_int_type(ch)) ? true : false; + } + + static bool + ispunct(wchar_t ch) + { + using namespace std; + return iswpunct(to_int_type(ch)) ? true : false; + } + + static bool + isspace(wchar_t ch) + { + using namespace std; + return iswspace(to_int_type(ch)) ? true : false; + } + + static bool + isupper(wchar_t ch) + { + using namespace std; + return iswupper(to_int_type(ch)) ? true : false; + } + + static bool + isxdigit(wchar_t ch) + { + using namespace std; + return iswxdigit(to_int_type(ch)) ? true : false; + } + + static bool + isblank BOOST_PREVENT_MACRO_SUBSTITUTION (wchar_t ch) + { + return (ch == L' ' || ch == L'\t'); + } + + static wchar_t + tolower(wchar_t ch) + { + using namespace std; + return isupper(ch) ? + to_char_type<wchar_t>(towlower(to_int_type(ch))) : ch; + } + + static wchar_t + toupper(wchar_t ch) + { + using namespace std; + return islower(ch) ? + to_char_type<wchar_t>(towupper(to_int_type(ch))) : ch; + } + + static ::boost::uint32_t + toucs4(int ch) + { + return ch; + } + }; +}}} + +#endif + |