177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc. 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "stlport_prefix.h" 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <hash_map> 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <locale> 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <istream> 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <functional> 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "c_locale.h" 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "locale_impl.h" 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "acquire_release.h" 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// ctype_byname<char> 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__DMC__) 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<char>::ctype_byname(const char* name, size_t refs) 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : ctype<char>( 0, false, refs) { 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_ctype = _STLP_PRIV __acquire_ctype(name, buf, 0, &__err_code); 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_ctype) 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_init(); 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid ctype_byname<char>::_M_init() { 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_ctype_table = _M_byname_table; 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // We have to do this, instead of just pointer twiddling, because 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // ctype_base::mask isn't the same type as _Locale_mask_t. 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Locale_mask_t* p = _Locale_ctype_table(_M_ctype); 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; i != table_size; ++i) { 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_byname_table[i] = ctype_base::mask(p[i]); 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<char>::~ctype_byname() 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_ctype(_M_ctype); } 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar ctype_byname<char>::do_toupper(char c) const 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (char)_Locale_toupper(_M_ctype, c); } 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar ctype_byname<char>::do_tolower(char c) const 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (char)_Locale_tolower(_M_ctype, c); } 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst char* 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<char>::do_toupper(char* first, const char* last) const { 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( ; first != last ; ++first) 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *first = (char)_Locale_toupper(_M_ctype, *first); 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return last; 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst char* 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<char>::do_tolower(char* first, const char* last) const { 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( ; first != last ; ++first) 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *first = (char)_Locale_tolower(_M_ctype, *first); 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return last; 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Some helper functions used in ctype<>::scan_is and scan_is_not. 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_WCHAR_T) 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// ctype_byname<wchar_t> 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Ctype_byname_w_is_mask : public unary_function<wchar_t, bool> { 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_mask_t M; 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_ctype* M_ctp; 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Ctype_byname_w_is_mask(_Locale_mask_t m, _Locale_ctype* c) 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : M(m), M_ctp(c) {} 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool operator()(wchar_t c) const 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { return _WLocale_ctype(M_ctp, c, M) != 0; } 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__DMC__) 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t>::ctype_byname(const char* name, size_t refs) 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : ctype<wchar_t>(refs) { 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_ctype = _STLP_PRIV __acquire_ctype(name, buf, 0, &__err_code); 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_ctype) 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t>::~ctype_byname() 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_ctype(_M_ctype); } 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool ctype_byname<wchar_t>::do_is(ctype_base::mask m, wchar_t c) const 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_ctype(_M_ctype, c, (_Locale_mask_t)m) != 0; } 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst wchar_t* 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t>::do_is(const wchar_t* low, const wchar_t* high, 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::mask * m) const { 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_mask_t all_bits = _Locale_mask_t(ctype_base::space | 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::print | 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::cntrl | 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::upper | 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::lower | 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::alpha | 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::digit | 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::punct | 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::xdigit); 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( ; low < high; ++low, ++m) 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *m = ctype_base::mask (_WLocale_ctype(_M_ctype, *low, all_bits)); 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return high; 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst wchar_t* 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t> 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ::do_scan_is(ctype_base::mask m, const wchar_t* low, const wchar_t* high) const 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return find_if(low, high, _STLP_PRIV _Ctype_byname_w_is_mask(m, _M_ctype)); } 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst wchar_t* 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t> 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ::do_scan_not(ctype_base::mask m, const wchar_t* low, const wchar_t* high) const 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return find_if(low, high, not1(_STLP_PRIV _Ctype_byname_w_is_mask(m, _M_ctype))); } 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t ctype_byname<wchar_t>::do_toupper(wchar_t c) const 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_toupper(_M_ctype, c); } 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst wchar_t* 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t>::do_toupper(wchar_t* low, const wchar_t* high) const { 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( ; low < high; ++low) 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *low = _WLocale_toupper(_M_ctype, *low); 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return high; 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t ctype_byname<wchar_t>::do_tolower(wchar_t c) const 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_tolower(_M_ctype, c); } 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst wchar_t* 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerctype_byname<wchar_t>::do_tolower(wchar_t* low, const wchar_t* high) const { 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( ; low < high; ++low) 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *low = _WLocale_tolower(_M_ctype, *low); 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return high; 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* WCHAR_T */ 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// collate_byname<char> 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__DMC__) 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<char>::collate_byname(const char* name, size_t refs) 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : collate<char>(refs) { 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_collate = _STLP_PRIV __acquire_collate(name, buf, 0, &__err_code); 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_collate) 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "collate"); 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<char>::~collate_byname() 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_collate(_M_collate); } 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint collate_byname<char>::do_compare(const char* __low1, 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* __high1, 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* __low2, 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* __high2) const { 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _Locale_strcmp(_M_collate, 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __low1, __high1 - __low1, 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __low2, __high2 - __low2); 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<char>::string_type 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<char>::do_transform(const char* low, const char* high) const { 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (low == high) 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return string_type(); 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t n = _Locale_strxfrm(_M_collate, NULL, 0, low, high - low); 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // NOT PORTABLE. What we're doing relies on internal details of the 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // string implementation. (Contiguity of string elements and presence 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // of trailing zero.) 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string_type buf(n, 0); 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_strxfrm(_M_collate, &(*buf.begin()), n + 1, low, high - low); 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return buf; 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_WCHAR_T) 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// collate_byname<wchar_t> 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__DMC__) 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<wchar_t>::collate_byname(const char* name, size_t refs) 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : collate<wchar_t>(refs) { 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_collate = _STLP_PRIV __acquire_collate(name, buf, 0, &__err_code); 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_collate) 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "collate"); 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<wchar_t>::~collate_byname() 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_collate(_M_collate); } 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint collate_byname<wchar_t>::do_compare(const wchar_t* low1, 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t* high1, 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t* low2, 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t* high2) const { 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _WLocale_strcmp(_M_collate, 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner low1, high1 - low1, 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner low2, high2 - low2); 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<wchar_t>::string_type 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercollate_byname<wchar_t>::do_transform(const wchar_t* low, 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t* high) const { 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (low == high) 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return string_type(); 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t n = _WLocale_strxfrm(_M_collate, NULL, 0, low, high - low); 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // NOT PORTABLE. What we're doing relies on internal details of the 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // string implementation. (Contiguity of string elements and presence 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // of trailing zero.) 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string_type buf(n, 0); 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _WLocale_strxfrm(_M_collate, &(*buf.begin()), n + 1, low, high - low); 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return buf; 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_NO_WCHAR_T */ 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// codecvt_byname<char> 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<char, char, mbstate_t> 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ::codecvt_byname(const char* name, size_t refs) 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : codecvt<char, char, mbstate_t>(refs) { 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<char, char, mbstate_t>::~codecvt_byname() {} 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_WCHAR_T) 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// codecvt_byname<wchar_t> 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::codecvt_byname(const char* name, size_t refs) 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : codecvt<wchar_t, char, mbstate_t>(refs) { 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_codecvt = _STLP_PRIV __acquire_codecvt(name, buf, 0, &__err_code); 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_codecvt) 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::~codecvt_byname() 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_codecvt(_M_codecvt); } 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt<wchar_t, char, mbstate_t>::result 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_out(state_type& state, 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const intern_type* from, 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const intern_type* from_end, 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const intern_type*& from_next, 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type* to, 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type* to_limit, 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type*& to_next) const { 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (from != from_end && to != to_limit) { 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t chars_stored = _WLocale_wctomb(_M_codecvt, 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to, to_limit - to, *from, 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner &state); 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (chars_stored == (size_t) -1) { 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return error; 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (chars_stored == (size_t) -2) { 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return partial; 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ++from; 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to += chars_stored; 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return ok; 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt<wchar_t, char, mbstate_t>::result 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_in(state_type& state, 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const extern_type* from, 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const extern_type* from_end, 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const extern_type*& from_next, 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner intern_type* to, 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner intern_type* to_end, 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner intern_type*& to_next) const { 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (from != from_end && to != to_end) { 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t chars_read = _WLocale_mbtowc(_M_codecvt, 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to, from, from_end - from, 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner &state); 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (chars_read == (size_t) -1) { 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return error; 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (chars_read == (size_t) -2) { 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return partial; 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from += chars_read; 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to++; 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from_next = from; 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return ok; 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt<wchar_t, char, mbstate_t>::result 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_unshift(state_type& state, 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type* to, 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type* to_limit, 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner extern_type*& to_next) const { 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to_next = to; 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t result = _WLocale_unshift(_M_codecvt, &state, 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner to, to_limit - to, &to_next); 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (result == (size_t) -1) 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return error; 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (result == (size_t) -2) 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return partial; 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (__ISCPP__) 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return /*to_next == to ? noconv :*/ ok; 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return to_next == to ? noconv : ok; 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_encoding() const _STLP_NOTHROW { 39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_WLocale_is_stateless(_M_codecvt)) { 39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int max_width = _WLocale_mb_cur_max(_M_codecvt); 39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int min_width = _WLocale_mb_cur_min(_M_codecvt); 39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return min_width == max_width ? min_width : 0; 39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return -1; 39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool 40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW 40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return false; } 40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint 40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_length(state_type& state, 40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const extern_type* from, 40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const extern_type* end, 40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t mx) const { 41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t __count = 0; 41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (from != end && mx--) { 41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner intern_type __dummy; 41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t chars_read = _WLocale_mbtowc(_M_codecvt, 41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner &__dummy, from, end - from, 41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner &state); 41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ((chars_read == (size_t) -1) || (chars_read == (size_t) -2)) // error or partial 41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __count += chars_read; 41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner from += chars_read; 42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return int(__count); 42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint 42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercodecvt_byname<wchar_t, char, mbstate_t>::do_max_length() const _STLP_NOTHROW 42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_mb_cur_max(_M_codecvt); } 42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// numpunct_byname<char> 43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnernumpunct_byname<char>::numpunct_byname(const char* name, size_t refs) 43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner: numpunct<char>(refs) { 43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_numeric = _STLP_PRIV __acquire_numeric(name, buf, 0, &__err_code); 43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_numeric) 43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "numpunct"); 44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnernumpunct_byname<char>::~numpunct_byname() 44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_numeric(_M_numeric); } 44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar numpunct_byname<char>::do_decimal_point() const 44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_decimal_point(_M_numeric); } 44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar numpunct_byname<char>::do_thousands_sep() const 44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_thousands_sep(_M_numeric); } 45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring numpunct_byname<char>::do_grouping() const { 45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char * __grouping = _Locale_grouping(_M_numeric); 45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (__grouping != NULL && __grouping[0] == CHAR_MAX) 45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __grouping = ""; 45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __grouping; 45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring numpunct_byname<char>::do_truename() const 45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_true(_M_numeric); } 46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring numpunct_byname<char>::do_falsename() const 46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_false(_M_numeric); } 46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// numpunct<wchar_t> 46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_WCHAR_T) 46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// numpunct_byname<wchar_t> 47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnernumpunct_byname<wchar_t>::numpunct_byname(const char* name, size_t refs) 47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner: numpunct<wchar_t>(refs) { 47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_numeric = _STLP_PRIV __acquire_numeric(name, buf, 0, &__err_code); 47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_numeric) 48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "numpunct"); 48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnernumpunct_byname<wchar_t>::~numpunct_byname() 48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_numeric(_M_numeric); } 48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t numpunct_byname<wchar_t>::do_decimal_point() const 48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_decimal_point(_M_numeric); } 48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t numpunct_byname<wchar_t>::do_thousands_sep() const 49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _WLocale_thousands_sep(_M_numeric); } 49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring numpunct_byname<wchar_t>::do_grouping() const { 49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char * __grouping = _Locale_grouping(_M_numeric); 49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (__grouping != NULL && __grouping[0] == CHAR_MAX) 49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __grouping = ""; 49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __grouping; 49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring numpunct_byname<wchar_t>::do_truename() const { 50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t buf[16]; 50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _WLocale_true(_M_numeric, _STLP_ARRAY_AND_SIZE(buf)); 50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring numpunct_byname<wchar_t>::do_falsename() const { 50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t buf[16]; 50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _WLocale_false(_M_numeric, _STLP_ARRAY_AND_SIZE(buf)); 50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic void _Init_monetary_formats(money_base::pattern& pos_format, 51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner money_base::pattern& neg_format, 51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_monetary * monetary) { 51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch (_Locale_p_sign_posn(monetary)) { 51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: // Parentheses surround the quantity and currency symbol 51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: // The sign string precedes the quantity and currency symbol 51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::sign; 52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_cs_precedes(monetary)) { 52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a positive value 52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::symbol; 52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::space; 52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::value; 52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a positive value 53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::value; 53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::space; 53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::symbol; 53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::symbol; 54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 2: // The sign string succeeds the quantity and currency symbol. 54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_cs_precedes(monetary)) { 54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a positive value 54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::space; 55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::sign; 55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::value; 55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::sign; 55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a positive value 56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::value; 56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::space; 56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::symbol; 56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::sign; 56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::symbol; 57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::sign; 57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 3: // The sign string immediately precedes the currency symbol. 57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_cs_precedes(monetary)) { 57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a positive value 58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::sign; 58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::symbol; 58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::space; 58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::value; 58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a positive value 59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::value; 59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::symbol; 59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 4: // The sign string immediately succeeds the currency symbol. 60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_cs_precedes(monetary)) { 60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a positive value 60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a positive value 60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::value; 60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_sep_by_space(monetary)) { 61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a positive value. 61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::space; 61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::symbol; 61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::sign; 61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a positive value. 61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::symbol; 61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::sign; 61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: // Default C++ Standard format 62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::none; 62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::value; 62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch (_Locale_n_sign_posn(monetary)) { 63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: // Parentheses surround the quantity and currency symbol 63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: // The sign string precedes the quantity and currency symbol 63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::sign; 63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_cs_precedes(monetary)) { 63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a negative value 63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::symbol; 63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::space; 64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::value; 64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::value; 64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a negative value 64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::value; 64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::space; 65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::symbol; 65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::symbol; 65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 2: // The sign string succeeds the quantity and currency symbol. 66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_cs_precedes(monetary)) { 66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a negative value 66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::space; 66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::value; 66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::sign; 66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::value; 67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::sign; 67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a negative value 67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::value; 67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::space; 68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::symbol; 68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::sign; 68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::symbol; 68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::sign; 68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 3: // The sign string immediately precedes the currency symbol. 69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_cs_precedes(monetary)) { 69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a negative value 69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::sign; 69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::symbol; 69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::space; 69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::value; 70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::value; 70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a negative value 70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::value; 70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::symbol; 71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 4: // The sign string immediately succeeds the currency symbol. 71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_cs_precedes(monetary)) { 71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a negative value 71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::none; 71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::value; 72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a negative value 72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::value; 72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_sep_by_space(monetary)) { 72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space separates currency symbol from a negative value. 72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::space; 72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::symbol; 72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::sign; 72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // a space not separates currency symbol from a negative value. 73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::symbol; 73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::sign; 73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: // Default C++ Standard format 73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::none; 74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::value; 74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// international variant of monetary 74677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 74777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 74877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * int_curr_symbol 74977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 75077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * The international currency symbol. The operand is a four-character 75177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * string, with the first three characters containing the alphabetic 75277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * international currency symbol in accordance with those specified 75377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * in the ISO 4217 specification. The fourth character is the character used 75477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * to separate the international currency symbol from the monetary quantity. 75577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 75677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html) 75777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 75877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 75977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 76077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Standards are unclear in the usage of international currency 76177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * and monetary formats. 76277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * But I am expect that international currency symbol should be the first 76377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * (not depends upon where currency symbol situated in the national 76477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * format). 76577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 76677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * If this isn't so, let's see: 76777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1 234.56 RUR 76877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * GBP 1,234.56 76977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * USD 1,234.56 77077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * The situation really is worse than you see above: 77177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * RUR typed wrong here---it prints '1 234.56 RUR ' (see space after RUR). 77277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This is due to intl_fmp.curr_symbol() == "RUR ". (see reference in comments 77377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * above). 77477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 77577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 77677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 77777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic void _Init_monetary_formats_int(money_base::pattern& pos_format, 77877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner money_base::pattern& neg_format, 77977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_monetary * monetary) 78077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 78177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 78277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch (_Locale_p_sign_posn(monetary)) { 78377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: // Parentheses surround the quantity and currency symbol 78477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: // The sign string precedes the quantity and currency symbol 78577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 78677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 78777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 78877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 78977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 79077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 2: // The sign string succeeds the quantity and currency symbol. 79177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 79277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::value; 79377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::sign; 79477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 79577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 79677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 3: // The sign string immediately precedes the currency symbol. 79777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 4: // The sign string immediately succeeds the currency symbol. 79877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 79977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_p_cs_precedes(monetary)) { 80077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a positive value 80177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 80277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::value; 80377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 80477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a positive value 80577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::value; 80677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::sign; 80777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 80877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::none; 80977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 81077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: // Default C++ Standard format 81177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[0] = (char) money_base::symbol; 81277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[1] = (char) money_base::sign; 81377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[2] = (char) money_base::none; 81477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos_format.field[3] = (char) money_base::value; 81577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 81677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 81777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 81877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 81977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch (_Locale_n_sign_posn(monetary)) { 82077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: // Parentheses surround the quantity and currency symbol 82177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: // The sign string precedes the quantity and currency symbol 82277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 82377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 82477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::value; 82577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 82677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 82777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 2: // The sign string succeeds the quantity and currency symbol. 82877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 82977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::value; 83077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::sign; 83177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 83277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 83377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 3: // The sign string immediately precedes the currency symbol. 83477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 4: // The sign string immediately succeeds the currency symbol. 83577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 83677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_Locale_n_cs_precedes(monetary)) { 83777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 1 if currency symbol precedes a negative value 83877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 83977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::value; 84077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } else { 84177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 0 if currency symbol succeeds a negative value 84277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::value; 84377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::sign; 84477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 84577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::none; 84677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 84777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: // Default C++ Standard format 84877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[0] = (char) money_base::symbol; 84977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[1] = (char) money_base::sign; 85077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[2] = (char) money_base::none; 85177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner neg_format.field[3] = (char) money_base::value; 85277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 85377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 85477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 85577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 85677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 85777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 85877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 85977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// moneypunct_byname<> 86077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 86177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, true>::moneypunct_byname(const char * name, 86277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t refs) 86377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : moneypunct<char, true>(refs) { 86477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 86577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 86677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 86777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 86877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 86977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 87077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_monetary) 87177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 87277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 87377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 87477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 87577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 87677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, true>::moneypunct_byname(_Locale_monetary *__mon) 87777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_monetary(__mon) { 87877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 87977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 88077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 88177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, true>::~moneypunct_byname() 88277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_monetary(_M_monetary); } 88377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 88477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar moneypunct_byname<char, true>::do_decimal_point() const 88577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_decimal_point(_M_monetary); } 88677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 88777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar moneypunct_byname<char, true>::do_thousands_sep() const 88877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_thousands_sep(_M_monetary); } 88977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, true>::do_grouping() const 89177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_grouping(_M_monetary); } 89277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, true>::do_curr_symbol() const 89477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_int_curr_symbol(_M_monetary); } 89577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, true>::do_positive_sign() const 89777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_positive_sign(_M_monetary); } 89877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, true>::do_negative_sign() const 90077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_negative_sign(_M_monetary); } 90177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 90277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint moneypunct_byname<char, true>::do_frac_digits() const 90377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_int_frac_digits(_M_monetary); } 90477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 90577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, false>::moneypunct_byname(const char * name, 90677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t refs) 90777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : moneypunct<char, false>(refs) { 90877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 90977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 91077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 91177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 91277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 91377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 91477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_monetary) 91577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 91677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 91777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 91877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 91977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 92077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, false>::moneypunct_byname(_Locale_monetary *__mon) 92177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_monetary(__mon) { 92277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 92377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 92477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 92577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<char, false>::~moneypunct_byname() 92677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_monetary(_M_monetary); } 92777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 92877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar moneypunct_byname<char, false>::do_decimal_point() const 92977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_decimal_point(_M_monetary); } 93077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 93177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar moneypunct_byname<char, false>::do_thousands_sep() const 93277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_thousands_sep(_M_monetary); } 93377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 93477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, false>::do_grouping() const 93577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_grouping(_M_monetary); } 93677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 93777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, false>::do_curr_symbol() const 93877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_currency_symbol(_M_monetary); } 93977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 94077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, false>::do_positive_sign() const 94177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_positive_sign(_M_monetary); } 94277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 94377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<char, false>::do_negative_sign() const 94477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_negative_sign(_M_monetary); } 94577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 94677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint moneypunct_byname<char, false>::do_frac_digits() const 94777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_frac_digits(_M_monetary); } 94877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 94977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 95077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// moneypunct_byname<wchar_t> 95177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 95277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_WCHAR_T) 95377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 95477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, true>::moneypunct_byname(const char * name, 95577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t refs) 95677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : moneypunct<wchar_t, true>(refs) { 95777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 95877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name(); 95977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 96077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 96177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 96277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 96377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_monetary) 96477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 96577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 96677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 96777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 96877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 96977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, true>::moneypunct_byname(_Locale_monetary *__mon) 97077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_monetary(__mon) { 97177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 97277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 97377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 97477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, true>::~moneypunct_byname() 97577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_monetary(_M_monetary); } 97677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 97777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t moneypunct_byname<wchar_t, true>::do_decimal_point() const 97877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_decimal_point(_M_monetary); } 97977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 98077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t moneypunct_byname<wchar_t, true>::do_thousands_sep() const 98177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_thousands_sep(_M_monetary); } 98277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 98377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<wchar_t, true>::do_grouping() const 98477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_grouping(_M_monetary); } 98577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 98677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline wstring __do_widen (string const& str) { 98777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_NO_MEMBER_TEMPLATES) || defined (_STLP_MSVC) 98877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring::_Reserve_t __Reserve; 98977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t __size = str.size(); 99077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result(__Reserve, __size); 99177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner copy(str.begin(), str.end(), result.begin()); 99277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 99377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result(str.begin(), str.end()); 99477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 99577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return result; 99677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 99777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 99877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, true>::do_curr_symbol() const 99977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_int_curr_symbol(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 100077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 100177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, true>::do_positive_sign() const 100277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_positive_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 100377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 100477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, true>::do_negative_sign() const 100577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_negative_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 100677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 100777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint moneypunct_byname<wchar_t, true>::do_frac_digits() const 100877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_int_frac_digits(_M_monetary); } 100977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 101077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, false>::moneypunct_byname(const char * name, 101177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t refs) 101277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : moneypunct<wchar_t, false>(refs) { 101377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!name) 101477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_null_name() ; 101577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 101677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int __err_code; 101777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf[_Locale_MAX_SIMPLE_NAME]; 101877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 101977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!_M_monetary) 102077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 102177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 102277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 102377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 102477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 102577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, false>::moneypunct_byname(_Locale_monetary *__mon) 102677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_monetary(__mon) { 102777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 102877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 102977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnermoneypunct_byname<wchar_t, false>::~moneypunct_byname() 103177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ _STLP_PRIV __release_monetary(_M_monetary); } 103277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t moneypunct_byname<wchar_t, false>::do_decimal_point() const 103477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_decimal_point(_M_monetary); } 103577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwchar_t moneypunct_byname<wchar_t, false>::do_thousands_sep() const 103777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_thousands_sep(_M_monetary); } 103877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstring moneypunct_byname<wchar_t, false>::do_grouping() const 104077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_mon_grouping(_M_monetary); } 104177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 104277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, false>::do_curr_symbol() const 104377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_currency_symbol(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 104477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 104577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, false>::do_positive_sign() const 104677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_positive_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 104777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 104877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerwstring moneypunct_byname<wchar_t, false>::do_negative_sign() const 104977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ wchar_t buf[16]; return _WLocale_negative_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 105077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint moneypunct_byname<wchar_t, false>::do_frac_digits() const 105277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Locale_frac_digits(_M_monetary); } 105377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 105577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 105777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1058