locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) { locale __tmp = ios_base::imbue(__loc); if (_M_streambuf) _M_streambuf->pubimbue(__loc); // no throwing here this->_M_cached_ctype = __loc._M_get_facet(ctype<char_type>::id) ; this->_M_cached_numpunct = __loc._M_get_facet(numpunct<char_type>::id) ; this->_M_cached_grouping = ((numpunct<char_type>*)_M_cached_numpunct)->grouping() ; return __tmp; }
locale _STLP_CALL locale::global(const locale& L) { locale old(_Stl_get_global_locale()->_M_impl); if (_Stl_get_global_locale()->_M_impl != L._M_impl) { _release_Locale_impl(_Stl_get_global_locale()->_M_impl); // this assign should be atomic, should be fixed here: _Stl_get_global_locale()->_M_impl = _get_Locale_impl(L._M_impl); // Set the global C locale, if appropriate. #if !defined(_STLP_NO_LOCALE_SUPPORT) && !defined(_STLP_WINCE) && !defined(_STLP_WCE_NET) if (L.name() != _Nameless) setlocale(LC_ALL, L.name().c_str()); #endif } return old; }
void print_locale_names(const locale& my_loc) { cout << "name of current global loale: " << locale().name() << '\n'; cout << "name of classic C locale: " << locale::classic().name() << '\n'; cout << "name of \"user's preferred locale\": " << locale("").name() << '\n'; cout << "name of my locale: " << my_loc.name() << '\n'; }
locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) { locale __tmp = ios_base::imbue(__loc); _STLP_TRY { if (_M_streambuf) _M_streambuf->pubimbue(__loc); // no throwing here this->_M_cached_ctype = __loc._M_get_facet(ctype<char_type>::id); this->_M_cached_numpunct = __loc._M_get_facet(numpunct<char_type>::id); this->_M_cached_grouping = ((numpunct<char_type>*)_M_cached_numpunct)->grouping(); } _STLP_CATCH_ALL { __tmp = ios_base::imbue(__tmp); _M_handle_exception(ios_base::failbit); } return __tmp; }
void test_numpunct(const locale& loc) { cout << "-- " << loc.name() << " --\n"; cout.imbue(loc); cout << 123456789 << endl; cout << defaultfloat << 12345678.9 << endl; cout << fixed << 12345678.9 << endl; cout << boolalpha << "true: " << true << ", false: " << false << endl; }
locale _STLP_CALL locale::global(const locale& L) { locale old; // A copy of the old global locale. L._M_impl->incr(); { _STLP_auto_lock lock(_Stl_loc_global_locale_lock); _Stl_loc_global_impl->decr(); // We made a copy, so it can't be zero. _Stl_loc_global_impl = L._M_impl; } // Set the global C locale, if appropriate. #if !defined(_STLP_WINCE) if (L.name() != _Nameless) setlocale(LC_ALL, L.name().c_str()); #endif return old; }
_Locale_impl* _STLP_CALL locale::global(const locale& L) { #endif locale old(_Stl_get_global_locale()->_M_impl); if (_Stl_get_global_locale()->_M_impl != L._M_impl) { _release_Locale_impl(_Stl_get_global_locale()->_M_impl); // this assign should be atomic, should be fixed here: _Stl_get_global_locale()->_M_impl = _get_Locale_impl(L._M_impl); // Set the global C locale, if appropriate. #if !defined(_STLP_NO_LOCALE_SUPPORT) if (L.name() != _Nameless) setlocale(LC_ALL, L.name().c_str()); #endif } #if !defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND) return old; #else return old._M_impl; #endif }
// Compare two locales for equality. bool locale::operator==(const locale& L) const { return this->_M_impl == L._M_impl || (this->name() == L.name() && this->name() != _Nameless); }
// Contruct a new locale where all facets that aren't in category c // come from L1, and all those that are in category c come from L2. locale::locale(const locale& L1, const locale& L2, category c) : _M_impl(0) { _Locale_impl* impl = new _Locale_impl(*L1._M_impl); _Locale_impl* i2 = L2._M_impl; if (L1.name() != _Nameless && L2.name() != _Nameless) _Stl_loc_combine_names(impl, L1._M_impl->name.c_str(), L2._M_impl->name.c_str(), c); else { impl->name = _Nameless; } if (c & collate) { impl->insert( i2, _STLP_STD::collate<char>::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::collate<wchar_t>::id); # endif } if (c & ctype) { impl->insert( i2, _STLP_STD::ctype<char>::id); impl->insert( i2, _STLP_STD::codecvt<char, char, mbstate_t>::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::ctype<wchar_t>::id); impl->insert( i2, _STLP_STD::codecvt<wchar_t, char, mbstate_t>::id); # endif } if (c & monetary) { impl->insert( i2, _STLP_STD::moneypunct<char, true>::id); impl->insert( i2, _STLP_STD::moneypunct<char, false>::id); impl->insert( i2, _STLP_STD::money_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::money_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::moneypunct<wchar_t, true>::id); impl->insert( i2, _STLP_STD::moneypunct<wchar_t, false>::id); impl->insert( i2, _STLP_STD::money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, _STLP_STD::money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); # endif } if (c & numeric) { impl->insert( i2, _STLP_STD::numpunct<char>::id); impl->insert( i2, _STLP_STD::num_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::num_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::numpunct<wchar_t>::id); impl->insert( i2, _STLP_STD::num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, _STLP_STD::num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); # endif } if (c & time) { impl->insert( i2, _STLP_STD::time_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, _STLP_STD::time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); # endif } if (c & messages) { impl->insert( i2, _STLP_STD::messages<char>::id); # ifndef _STLP_NO_WCHAR_T impl->insert( i2, _STLP_STD::messages<wchar_t>::id); # endif } _M_impl = _get_Locale_impl( impl ); }
// Contruct a new locale where all facets that aren't in category c // come from L1, and all those that are in category c come from L2. _STLP_EXP_DECLSPEC locale::locale(const locale& L1, const locale& L2, category c) : _M_impl(0) { _Locale* impl = new _Locale(*L1._M_impl); _Locale_impl* i2 = L2._M_impl; #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) const string nameless("*"); # else static string nameless("*"); # endif if (L1.name() != nameless && L2.name() != nameless) _Stl_loc_combine_names(impl, L1._M_impl->name.c_str(), L2._M_impl->name.c_str(), c); else { impl->name = "*"; } if (c & collate) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::collate<char>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::collate<char>::id); #endif # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::collate<wchar_t>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::collate<wchar_t>::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //!_STLP_NO_WCHAR_T } if (c & ctype) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::codecvt<char, char, mbstate_t>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::ctype<char>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::codecvt<char, char, mbstate_t>::id); impl->insert( i2, _STLP_STD::ctype<char>::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::ctype<wchar_t>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::codecvt<wchar_t, char, mbstate_t>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::ctype<wchar_t>::id); impl->insert( i2, _STLP_STD::codecvt<wchar_t, char, mbstate_t>::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //!_STLP_NO_WCHAR_T } if (c & monetary) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::moneypunct<char, true>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::moneypunct<char, false>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::money_get<char, istreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::money_put<char, ostreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::moneypunct<char, true>::id); impl->insert( i2, _STLP_STD::moneypunct<char, false>::id); impl->insert( i2, _STLP_STD::money_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::money_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::moneypunct<wchar_t, true>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::moneypunct<wchar_t, false>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::moneypunct<wchar_t, true>::id); impl->insert( i2, _STLP_STD::moneypunct<wchar_t, false>::id); impl->insert( i2, _STLP_STD::money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, _STLP_STD::money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //!_STLP_NO_WCHAR_T } if (c & numeric) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::numpunct<char>::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::num_get<char, istreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::num_put<char, ostreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::numpunct<char>::id); impl->insert( i2, _STLP_STD::num_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::num_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); #endif # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert(i2, _STLP_STD::numpunct<wchar_t>::GetFacetLocaleId()); impl->insert( i2, num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); impl->insert( i2, num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::numpunct<wchar_t>::id); impl->insert( i2, num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //!_STLP_NO_WCHAR_T } if (c & time) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::time_get<char, istreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::time_put<char, ostreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::time_get<char, istreambuf_iterator<char, char_traits<char> > >::id); impl->insert( i2, _STLP_STD::time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); impl->insert( i2, _STLP_STD::time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); impl->insert( i2, _STLP_STD::time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //!_STLP_NO_WCHAR_T } if (c & messages) { #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::messages<char>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::messages<char>::id); #endif # ifndef _STLP_NO_WCHAR_T #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) impl->insert( i2, _STLP_STD::messages<wchar_t>::GetFacetLocaleId()); #else impl->insert( i2, _STLP_STD::messages<wchar_t>::id); #endif //__LIBSTD_CPP_SYMBIAN32_WSD__ # endif //_STLP_NO_WCHAR_T } _M_impl = impl; }