From dddfc1a63a67679682285fc5fdb9c796bd7083ab Mon Sep 17 00:00:00 2001 From: John Maddock Date: Fri, 5 Dec 2003 13:01:29 +0000 Subject: [PATCH] Refined building without /Zc:wchar_t on msvc 7 and above [SVN r21147] --- include/boost/regex/config.hpp | 2 +- src/c_regex_traits.cpp | 84 ++++++++++++++--------------- src/c_regex_traits_common.cpp | 8 +-- src/cpp_regex_traits.cpp | 5 ++ src/w32_regex_traits.cpp | 98 +++++++++++++++++----------------- 5 files changed, 101 insertions(+), 96 deletions(-) diff --git a/include/boost/regex/config.hpp b/include/boost/regex/config.hpp index 8e736227..5e843fdc 100644 --- a/include/boost/regex/config.hpp +++ b/include/boost/regex/config.hpp @@ -191,7 +191,7 @@ using std::distance; ****************************************************************************/ #ifdef __cplusplus -#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1300) && !defined(BOOST_REGEX_NO_LIB) && !defined(BOOST_ALL_NO_LIB) +#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1300) # define BOOST_REGEX_HAS_SHORT_WCHAR_T namespace boost{ typedef __wchar_t regex_wchar_type; } #else diff --git a/src/c_regex_traits.cpp b/src/c_regex_traits.cpp index 1cddfb40..cb711a53 100644 --- a/src/c_regex_traits.cpp +++ b/src/c_regex_traits.cpp @@ -182,28 +182,28 @@ std::size_t BOOST_REGEX_CALL _re_get_message(char* buf, std::size_t len, std::si #ifndef BOOST_NO_WREGEX -BOOST_REGEX_DECL wchar_t re_zero_w; -BOOST_REGEX_DECL wchar_t re_ten_w; +BOOST_REGEX_DECL boost::regex_wchar_type re_zero_w; +BOOST_REGEX_DECL boost::regex_wchar_type re_ten_w; unsigned int nlsw_count = 0; std::string* wlocale_name = 0; struct syntax_map_t { - wchar_t c; + boost::regex_wchar_type c; unsigned int type; }; std::list* syntax; -std::size_t BOOST_REGEX_CALL re_get_message(wchar_t* buf, std::size_t len, std::size_t id) +std::size_t BOOST_REGEX_CALL re_get_message(boost::regex_wchar_type* buf, std::size_t len, std::size_t id) { std::size_t size = _re_get_message(static_cast(0), 0, id); if(len < size) return size; boost::scoped_array cb(new char[size]); _re_get_message(cb.get(), size, id); - size = boost::c_regex_traits::strwiden(buf, len, cb.get()); + size = boost::c_regex_traits::strwiden(buf, len, cb.get()); return size; } #endif @@ -584,10 +584,10 @@ char c_traits_base::lower_case_map[map_size]; } // namespace re_detail #ifndef BOOST_NO_WREGEX -bool BOOST_REGEX_CALL c_regex_traits::lookup_collatename(std::basic_string& out, const wchar_t* first, const wchar_t* last) +bool BOOST_REGEX_CALL c_regex_traits::lookup_collatename(std::basic_string& out, const regex_wchar_type* first, const regex_wchar_type* last) { BOOST_RE_GUARD_STACK - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -598,13 +598,13 @@ bool BOOST_REGEX_CALL c_regex_traits::lookup_collatename(std::basic_str { if(t_out[0]) { - len = strwiden(static_cast(0), 0, t_out.c_str()); - scoped_array wb(new wchar_t[len]); + len = strwiden(static_cast(0), 0, t_out.c_str()); + scoped_array wb(new regex_wchar_type[len]); strwiden(wb.get(), len, t_out.c_str()); out = wb.get(); } else - out.append(1, (wchar_t)0); + out.append(1, (regex_wchar_type)0); } return result; } @@ -773,7 +773,7 @@ int BOOST_REGEX_CALL c_regex_traits::toi(const char*& first, const char* l #ifndef BOOST_NO_WREGEX -unsigned int BOOST_REGEX_CALL c_regex_traits::syntax_type(size_type c) +unsigned int BOOST_REGEX_CALL c_regex_traits::syntax_type(size_type c) { BOOST_RE_GUARD_STACK std::list::const_iterator first, last; @@ -788,7 +788,7 @@ unsigned int BOOST_REGEX_CALL c_regex_traits::syntax_type(size_type c) return 0; } -void BOOST_REGEX_CALL c_regex_traits::init() +void BOOST_REGEX_CALL c_regex_traits::init() { BOOST_RE_GUARD_STACK re_detail::re_init_threads(); @@ -818,10 +818,10 @@ void BOOST_REGEX_CALL c_regex_traits::init() ++nlsw_count; } -bool BOOST_REGEX_CALL c_regex_traits::do_lookup_collate(std::basic_string& out, const wchar_t* first, const wchar_t* last) +bool BOOST_REGEX_CALL c_regex_traits::do_lookup_collate(std::basic_string& out, const regex_wchar_type* first, const regex_wchar_type* last) { BOOST_RE_GUARD_STACK - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -829,8 +829,8 @@ bool BOOST_REGEX_CALL c_regex_traits::do_lookup_collate(std::basic_stri bool result = base_type::do_lookup_collate(t_out, buf.get()); if(result) { - len = strwiden(static_cast(0), 0, t_out.c_str()); - scoped_array wb(new wchar_t[len]); + len = strwiden(static_cast(0), 0, t_out.c_str()); + scoped_array wb(new regex_wchar_type[len]); strwiden(wb.get(), len, t_out.c_str()); out = wb.get(); } @@ -838,7 +838,7 @@ bool BOOST_REGEX_CALL c_regex_traits::do_lookup_collate(std::basic_stri } -void BOOST_REGEX_CALL c_regex_traits::update() +void BOOST_REGEX_CALL c_regex_traits::update() { BOOST_RE_GUARD_STACK #ifdef BOOST_HAS_THREADS @@ -851,8 +851,8 @@ void BOOST_REGEX_CALL c_regex_traits::update() if(*wlocale_name != l) { *wlocale_name = l; - std::basic_string s; - const wchar_t* p = L"zero"; + std::basic_string s; + const regex_wchar_type* p = (const regex_wchar_type*)L"zero"; if(do_lookup_collate(s, p, p+4)) { jm_assert(s.size() == 1); @@ -861,7 +861,7 @@ void BOOST_REGEX_CALL c_regex_traits::update() else re_zero_w = L'0'; - p = L"ten"; + p = (const regex_wchar_type*)L"ten"; if(do_lookup_collate(s, p, p+3)) { jm_assert(s.size() == 1); @@ -871,13 +871,13 @@ void BOOST_REGEX_CALL c_regex_traits::update() re_ten_w = L'a'; unsigned int i; - wchar_t buf[256]; + regex_wchar_type buf[256]; syntax_map_t sm; syntax->clear(); for(i = 1; i < syntax_max; ++i) { - wchar_t* ptr = buf; - re_get_message(static_cast(buf), 256, i+100); + regex_wchar_type* ptr = buf; + re_get_message(static_cast(buf), 256, i+100); for(; *ptr; ++ptr) { sm.c = *ptr; @@ -889,7 +889,7 @@ void BOOST_REGEX_CALL c_regex_traits::update() } } -void BOOST_REGEX_CALL c_regex_traits::m_free() +void BOOST_REGEX_CALL c_regex_traits::m_free() { BOOST_RE_GUARD_STACK #ifdef BOOST_HAS_THREADS @@ -901,7 +901,7 @@ void BOOST_REGEX_CALL c_regex_traits::m_free() re_free_collate(); // add reference to static member here to ensure // that the linker includes it in the .exe: - if((nlsw_count == 0) && (0 != &c_regex_traits::init_)) + if((nlsw_count == 0) && (0 != &c_regex_traits::init_)) { // cleanup: delete wlocale_name; @@ -913,7 +913,7 @@ void BOOST_REGEX_CALL c_regex_traits::m_free() #endif } -bool BOOST_REGEX_CALL c_regex_traits::do_iswclass(wchar_t c, boost::uint_fast32_t f) +bool BOOST_REGEX_CALL c_regex_traits::do_iswclass(regex_wchar_type c, boost::uint_fast32_t f) { BOOST_RE_GUARD_STACK if((c & ~0xFF) == 0) @@ -939,7 +939,7 @@ bool BOOST_REGEX_CALL c_regex_traits::do_iswclass(wchar_t c, boost::uin return false; } -void BOOST_REGEX_CALL c_regex_traits::transform(std::basic_string& out, const std::basic_string& in) +void BOOST_REGEX_CALL c_regex_traits::transform(std::basic_string& out, const std::basic_string& in) { BOOST_RE_GUARD_STACK #ifndef BOOST_MSVC @@ -954,8 +954,8 @@ void BOOST_REGEX_CALL c_regex_traits::transform(std::basic_string buf(new wchar_t[n+1]); - n = std::wcsxfrm(buf.get(), in.c_str(), n+1); + scoped_array buf(new regex_wchar_type[n+1]); + n = std::wcsxfrm((wchar_t*)buf.get(), (const wchar_t*)in.c_str(), n+1); if(n == (std::size_t)(-1)) { out = in; @@ -964,7 +964,7 @@ void BOOST_REGEX_CALL c_regex_traits::transform(std::basic_string::transform_primary(std::basic_string& out, const std::basic_string& in) +void BOOST_REGEX_CALL c_regex_traits::transform_primary(std::basic_string& out, const std::basic_string& in) { transform(out, in); switch(sort_type) @@ -988,11 +988,11 @@ void BOOST_REGEX_CALL c_regex_traits::transform_primary(std::basic_stri } } -unsigned c_regex_traits::sort_type; -wchar_t c_regex_traits::sort_delim; +unsigned c_regex_traits::sort_type; +regex_wchar_type c_regex_traits::sort_delim; -int BOOST_REGEX_CALL c_regex_traits::toi(wchar_t c) +int BOOST_REGEX_CALL c_regex_traits::toi(regex_wchar_type c) { if(is_class(c, char_class_digit)) return c - re_zero_w; @@ -1001,7 +1001,7 @@ int BOOST_REGEX_CALL c_regex_traits::toi(wchar_t c) return -1; // error!! } -int BOOST_REGEX_CALL c_regex_traits::toi(const wchar_t*& first, const wchar_t* last, int radix) +int BOOST_REGEX_CALL c_regex_traits::toi(const regex_wchar_type*& first, const regex_wchar_type* last, int radix) { unsigned int maxval; if(radix < 0) @@ -1031,9 +1031,9 @@ int BOOST_REGEX_CALL c_regex_traits::toi(const wchar_t*& first, const w return result; } -boost::uint_fast32_t BOOST_REGEX_CALL c_regex_traits::lookup_classname(const wchar_t* first, const wchar_t* last) +boost::uint_fast32_t BOOST_REGEX_CALL c_regex_traits::lookup_classname(const regex_wchar_type* first, const regex_wchar_type* last) { - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -1041,24 +1041,24 @@ boost::uint_fast32_t BOOST_REGEX_CALL c_regex_traits::lookup_classname( return result; } -c_regex_traits c_regex_traits::init_; +c_regex_traits c_regex_traits::init_; -std::size_t BOOST_REGEX_CALL c_regex_traits::strnarrow(char *s1, std::size_t len, const wchar_t *s2) +std::size_t BOOST_REGEX_CALL c_regex_traits::strnarrow(char *s1, std::size_t len, const regex_wchar_type *s2) { BOOST_RE_GUARD_STACK - std::size_t size = std::wcslen(s2) + 1; + std::size_t size = std::wcslen((const wchar_t*)s2) + 1; if(size > len) return size; - return std::wcstombs(s1, s2, len); + return std::wcstombs(s1, (const wchar_t*)s2, len); } -std::size_t BOOST_REGEX_CALL c_regex_traits::strwiden(wchar_t *s1, std::size_t len, const char *s2) +std::size_t BOOST_REGEX_CALL c_regex_traits::strwiden(regex_wchar_type *s1, std::size_t len, const char *s2) { BOOST_RE_GUARD_STACK std::size_t size = std::strlen(s2) + 1; if(size > len) return size; - size = std::mbstowcs(s1, s2, len); + size = std::mbstowcs((wchar_t*)s1, s2, len); s1[size] = 0; return size + 1; } diff --git a/src/c_regex_traits_common.cpp b/src/c_regex_traits_common.cpp index 6bba7ec9..1dc0b4b4 100644 --- a/src/c_regex_traits_common.cpp +++ b/src/c_regex_traits_common.cpp @@ -221,7 +221,7 @@ BOOST_REGEX_DECL std::size_t BOOST_REGEX_CALL re_get_default_message(char* buf, } #ifndef BOOST_NO_WREGEX -const wchar_t combining_ranges[] = { 0x0300, 0x0361, +const regex_wchar_type combining_ranges[] = { 0x0300, 0x0361, 0x0483, 0x0486, 0x0903, 0x0903, 0x093E, 0x0940, @@ -260,10 +260,10 @@ const wchar_t combining_ranges[] = { 0x0300, 0x0361, 0xFE20, 0xFE23, 0xffff, 0xffff, }; -BOOST_REGEX_DECL bool BOOST_REGEX_CALL is_combining(wchar_t c) +BOOST_REGEX_DECL bool BOOST_REGEX_CALL is_combining(regex_wchar_type c) { BOOST_RE_GUARD_STACK - const wchar_t* p = combining_ranges + 1; + const regex_wchar_type* p = combining_ranges + 1; while(*p < c) p += 2; --p; if((c >= *p) && (c <= *(p+1))) @@ -531,7 +531,7 @@ BOOST_REGEX_DECL unsigned short wide_unicode_classes[] = { c_traits_base::char_class_alpha | c_traits_base::char_class_lower, // 'ÿ' 255 }; -BOOST_REGEX_DECL wchar_t wide_lower_case_map[] = { +BOOST_REGEX_DECL regex_wchar_type wide_lower_case_map[] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, diff --git a/src/cpp_regex_traits.cpp b/src/cpp_regex_traits.cpp index edda2cab..89ae5d03 100644 --- a/src/cpp_regex_traits.cpp +++ b/src/cpp_regex_traits.cpp @@ -21,6 +21,11 @@ #include +#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1300) && !defined(_NATIVE_WCHAR_T_DEFINED) +# pragma message ("disabling support for class cpp_regex_traits - rebuild with /Zc:wchar_t if you really need this") +# define BOOST_NO_WREGEX +#endif + #if !defined(BOOST_NO_STD_LOCALE) # ifdef BOOST_MSVC diff --git a/src/w32_regex_traits.cpp b/src/w32_regex_traits.cpp index 277e6a3b..2f3f0456 100644 --- a/src/w32_regex_traits.cpp +++ b/src/w32_regex_traits.cpp @@ -147,14 +147,14 @@ enum syntax_map_size #ifndef BOOST_NO_WREGEX -BOOST_REGEX_DECL wchar_t re_zero_w; -BOOST_REGEX_DECL wchar_t re_ten_w; +BOOST_REGEX_DECL boost::regex_wchar_type re_zero_w; +BOOST_REGEX_DECL boost::regex_wchar_type re_ten_w; bool isPlatformNT = false; struct syntax_map_t { - wchar_t c; + boost::regex_wchar_type c; unsigned int type; }; @@ -164,14 +164,14 @@ std::list* syntax; std::size_t BOOST_REGEX_CALL _re_get_message(char* buf, std::size_t len, unsigned id); -std::size_t BOOST_REGEX_CALL get_message(wchar_t* buf, std::size_t len, unsigned id) +std::size_t BOOST_REGEX_CALL get_message(boost::regex_wchar_type* buf, std::size_t len, unsigned id) { std::size_t size = _re_get_message(static_cast(0), 0, id); if(len < size) return size; boost::scoped_array cb(new char[size]); _re_get_message(cb.get(), size, id); - size = boost::w32_regex_traits::strwiden(buf, len, cb.get()); + size = boost::w32_regex_traits::strwiden(buf, len, cb.get()); return size; } @@ -338,18 +338,18 @@ void BOOST_REGEX_CALL w32_traits_base::do_init() #ifndef BOOST_NO_WREGEX // // wide string data: - std::basic_string ws; - const wchar_t* wp = L"zero"; - if(w32_regex_traits::lookup_collatename(ws, wp, wp+4)) + std::basic_string ws; + const regex_wchar_type* wp = (const regex_wchar_type*)L"zero"; + if(w32_regex_traits::lookup_collatename(ws, wp, wp+4)) { jm_assert(ws.size() == 1); re_zero_w = *ws.c_str(); } else - re_zero_w = L'0'; + re_zero_w = (regex_wchar_type)L'0'; - wp = L"ten"; - if(w32_regex_traits::lookup_collatename(ws, wp, wp+3)) + wp = (const regex_wchar_type*)L"ten"; + if(w32_regex_traits::lookup_collatename(ws, wp, wp+3)) { jm_assert(ws.size() == 1); re_ten_w = *ws.c_str(); @@ -357,12 +357,12 @@ void BOOST_REGEX_CALL w32_traits_base::do_init() else re_ten_w = L'a'; - wchar_t wbuf[256]; + regex_wchar_type wbuf[256]; syntax_map_t sm; syntax->clear(); for(i = 1; i < syntax_max; ++i) { - wchar_t* ptr = wbuf; + regex_wchar_type* ptr = wbuf; get_message(wbuf, 256, i+100); for(; *ptr; ++ptr) { @@ -583,10 +583,10 @@ int BOOST_REGEX_CALL w32_regex_traits::toi(const char*& first, const char* #ifndef BOOST_NO_WREGEX -bool BOOST_REGEX_CALL w32_regex_traits::lookup_collatename(std::basic_string& out, const wchar_t* first, const wchar_t* last) +bool BOOST_REGEX_CALL w32_regex_traits::lookup_collatename(std::basic_string& out, const regex_wchar_type* first, const regex_wchar_type* last) { BOOST_RE_GUARD_STACK - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -597,18 +597,18 @@ bool BOOST_REGEX_CALL w32_regex_traits::lookup_collatename(std::basic_s { if(t_out[0]) { - len = strwiden(static_cast(0), 0, t_out.c_str()); - scoped_array wb(new wchar_t[len]); + len = strwiden(static_cast(0), 0, t_out.c_str()); + scoped_array wb(new regex_wchar_type[len]); strwiden(wb.get(), len, t_out.c_str()); out = wb.get(); } else - out.append(1,(wchar_t)0); + out.append(1,(regex_wchar_type)0); } return result; } -unsigned int BOOST_REGEX_CALL w32_regex_traits::syntax_type(size_type c) +unsigned int BOOST_REGEX_CALL w32_regex_traits::syntax_type(size_type c) { BOOST_RE_GUARD_STACK std::list::const_iterator first, last; @@ -623,10 +623,10 @@ unsigned int BOOST_REGEX_CALL w32_regex_traits::syntax_type(size_type c return 0; } -bool BOOST_REGEX_CALL w32_regex_traits::do_lookup_collate(std::basic_string& out, const wchar_t* first, const wchar_t* last) +bool BOOST_REGEX_CALL w32_regex_traits::do_lookup_collate(std::basic_string& out, const regex_wchar_type* first, const regex_wchar_type* last) { BOOST_RE_GUARD_STACK - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -634,8 +634,8 @@ bool BOOST_REGEX_CALL w32_regex_traits::do_lookup_collate(std::basic_st bool result = base_type::do_lookup_collate(t_out, buf.get()); if(result) { - len = strwiden(static_cast(0), 0, t_out.c_str()); - scoped_array wb(new wchar_t[len]); + len = strwiden(static_cast(0), 0, t_out.c_str()); + scoped_array wb(new regex_wchar_type[len]); strwiden(wb.get(), len, t_out.c_str()); out = wb.get(); } @@ -643,7 +643,7 @@ bool BOOST_REGEX_CALL w32_regex_traits::do_lookup_collate(std::basic_st } -void BOOST_REGEX_CALL w32_regex_traits::update() +void BOOST_REGEX_CALL w32_regex_traits::update() { BOOST_RE_GUARD_STACK #ifdef BOOST_HAS_THREADS @@ -652,7 +652,7 @@ void BOOST_REGEX_CALL w32_regex_traits::update() do_init(); } -w32_regex_traits::w32_regex_traits() +w32_regex_traits::w32_regex_traits() { BOOST_RE_GUARD_STACK #ifdef BOOST_HAS_THREADS @@ -662,7 +662,7 @@ w32_regex_traits::w32_regex_traits() ++entry_count; } -w32_regex_traits::~w32_regex_traits() +w32_regex_traits::~w32_regex_traits() { BOOST_RE_GUARD_STACK #ifdef BOOST_HAS_THREADS @@ -670,7 +670,7 @@ w32_regex_traits::~w32_regex_traits() #endif // add reference to static member here to ensure // that the linker includes it in the .exe: - if((--entry_count == 0) && (0 != &w32_regex_traits::init_) && is_init) + if((--entry_count == 0) && (0 != &w32_regex_traits::init_) && is_init) do_free(); #ifdef BOOST_HAS_THREADS g.acquire(false); @@ -678,7 +678,7 @@ w32_regex_traits::~w32_regex_traits() #endif } -bool BOOST_REGEX_CALL w32_regex_traits::do_iswclass(wchar_t c, boost::uint_fast32_t f) +bool BOOST_REGEX_CALL w32_regex_traits::do_iswclass(regex_wchar_type c, boost::uint_fast32_t f) { BOOST_RE_GUARD_STACK if((c & ~0xFF) == 0) @@ -686,20 +686,20 @@ bool BOOST_REGEX_CALL w32_regex_traits::do_iswclass(wchar_t c, boost::u WORD mask; if(f & char_class_unicode) return true; - else if(isPlatformNT && GetStringTypeW(CT_CTYPE1, &c, 1, &mask)) + else if(isPlatformNT && GetStringTypeW(CT_CTYPE1, (const wchar_t*)&c, 1, &mask)) return BOOST_REGEX_MAKE_BOOL(mask & f & char_class_win); else if((f & char_class_graph) == char_class_graph) return true; // all wide characters are considered "graphics" return false; } -void BOOST_REGEX_CALL w32_regex_traits::transform(std::basic_string& out, const std::basic_string& in) +void BOOST_REGEX_CALL w32_regex_traits::transform(std::basic_string& out, const std::basic_string& in) { BOOST_RE_GUARD_STACK scoped_array alt; size_t n; if(isPlatformNT) - n = LCMapStringW(GetUserDefaultLCID(), LCMAP_SORTKEY, in.c_str(), -1, 0, 0); + n = LCMapStringW(GetUserDefaultLCID(), LCMAP_SORTKEY, (const wchar_t*)in.c_str(), -1, 0, 0); else { n = strnarrow(static_cast(0), 0, in.c_str()); @@ -712,21 +712,21 @@ void BOOST_REGEX_CALL w32_regex_traits::transform(std::basic_string buf(new wchar_t[n+1]); + scoped_array buf(new regex_wchar_type[n+1]); // under win32 we get mapped to an array of bytes // not characters; since the underlying engine has to - // deal with chars we widen the bytes to wchar_t to ensure + // deal with chars we widen the bytes to regex_wchar_type to ensure // the sort order remains unchanged when we compare. scoped_array t(new char[n+1]); if(isPlatformNT) - n = LCMapStringW(GetUserDefaultLCID(), LCMAP_SORTKEY, in.c_str(), -1, reinterpret_cast(t.get()), (int)n); + n = LCMapStringW(GetUserDefaultLCID(), LCMAP_SORTKEY, (const wchar_t*)in.c_str(), -1, reinterpret_cast(t.get()), (int)n); else n = LCMapStringA(GetUserDefaultLCID(), LCMAP_SORTKEY, alt.get(), -1, t.get(), (int)n); int i = -1; do { ++i; - buf[i] = (wchar_t)(unsigned char)t[i]; + buf[i] = (regex_wchar_type)(unsigned char)t[i]; } while(t[i]); if(n == (size_t)(-1)) { @@ -736,7 +736,7 @@ void BOOST_REGEX_CALL w32_regex_traits::transform(std::basic_string::transform_primary(std::basic_string& out, const std::basic_string& in) +void BOOST_REGEX_CALL w32_regex_traits::transform_primary(std::basic_string& out, const std::basic_string& in) { transform(out, in); for(unsigned int i = 0; i < out.size(); ++i) @@ -750,7 +750,7 @@ void BOOST_REGEX_CALL w32_regex_traits::transform_primary(std::basic_st } -int BOOST_REGEX_CALL w32_regex_traits::toi(wchar_t c) +int BOOST_REGEX_CALL w32_regex_traits::toi(regex_wchar_type c) { if(is_class(c, char_class_digit)) return c - re_zero_w; @@ -759,7 +759,7 @@ int BOOST_REGEX_CALL w32_regex_traits::toi(wchar_t c) return -1; // error!! } -int BOOST_REGEX_CALL w32_regex_traits::toi(const wchar_t*& first, const wchar_t* last, int radix) +int BOOST_REGEX_CALL w32_regex_traits::toi(const regex_wchar_type*& first, const regex_wchar_type* last, int radix) { unsigned int maxval; if(radix < 0) @@ -789,9 +789,9 @@ int BOOST_REGEX_CALL w32_regex_traits::toi(const wchar_t*& first, const return result; } -boost::uint_fast32_t BOOST_REGEX_CALL w32_regex_traits::lookup_classname(const wchar_t* first, const wchar_t* last) +boost::uint_fast32_t BOOST_REGEX_CALL w32_regex_traits::lookup_classname(const regex_wchar_type* first, const regex_wchar_type* last) { - std::basic_string s(first, last); + std::basic_string s(first, last); std::size_t len = strnarrow(static_cast(0), 0, s.c_str()); scoped_array buf(new char[len]); strnarrow(buf.get(), len, s.c_str()); @@ -799,7 +799,7 @@ boost::uint_fast32_t BOOST_REGEX_CALL w32_regex_traits::lookup_classnam return result; } -wchar_t BOOST_REGEX_CALL w32_regex_traits::wtolower(wchar_t c) +regex_wchar_type BOOST_REGEX_CALL w32_regex_traits::wtolower(regex_wchar_type c) { BOOST_RE_GUARD_STACK if(isPlatformNT) @@ -808,27 +808,27 @@ wchar_t BOOST_REGEX_CALL w32_regex_traits::wtolower(wchar_t c) } -w32_regex_traits w32_regex_traits::init_; +w32_regex_traits w32_regex_traits::init_; -std::size_t BOOST_REGEX_CALL w32_regex_traits::strnarrow(char *s1, std::size_t len, const wchar_t *s2) +std::size_t BOOST_REGEX_CALL w32_regex_traits::strnarrow(char *s1, std::size_t len, const regex_wchar_type *s2) { BOOST_RE_GUARD_STACK - std::size_t size = WideCharToMultiByte(CP_ACP, 0, s2, -1, s1, 0, 0, 0); + std::size_t size = WideCharToMultiByte(CP_ACP, 0, (const wchar_t*)s2, -1, s1, 0, 0, 0); if(size > len) return size; - return WideCharToMultiByte(CP_ACP, 0, s2, -1, s1, (int)len, 0, 0); + return WideCharToMultiByte(CP_ACP, 0, (const wchar_t*)s2, -1, s1, (int)len, 0, 0); } -std::size_t BOOST_REGEX_CALL w32_regex_traits::strwiden(wchar_t *s1, std::size_t len, const char *s2) +std::size_t BOOST_REGEX_CALL w32_regex_traits::strwiden(regex_wchar_type *s1, std::size_t len, const char *s2) { BOOST_RE_GUARD_STACK - std::size_t size = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, s2, -1, s1, 0); + std::size_t size = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, s2, -1, (wchar_t*)s1, 0); if(size > len) return size; - return MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, s2, -1, s1, (int)len); + return MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, s2, -1, (wchar_t*)s1, (int)len); } -unsigned short w32_regex_traits::wide_unicode_classes[] = { +unsigned short w32_regex_traits::wide_unicode_classes[] = { re_detail::w32_traits_base::char_class_cntrl, // '' 0 re_detail::w32_traits_base::char_class_cntrl, // '' 1 re_detail::w32_traits_base::char_class_cntrl, // '' 2