1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Silicon Graphics Computer Systems, Inc. 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Boris Fomitchev 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This material is provided "as is", with absolutely no warranty expressed 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or implied. Any use is at your own risk. 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use or copy this software for any purpose is hereby granted 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * without fee, provided the above notices are retained on all copies. 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to modify the code and to distribute modified code is granted, 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided the above notices are retained, and a notice that the code was 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * modified is included with the above copyright notice. 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "stlport_prefix.h" 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <hash_map> 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <locale> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <istream> 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <functional> 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "c_locale.h" 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "locale_impl.h" 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "acquire_release.h" 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//---------------------------------------------------------------------- 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// ctype_byname<char> 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<char>::ctype_byname(const char* name, size_t refs) 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : ctype<char>( 0, false, refs) { 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_ctype = _STLP_PRIV __acquire_ctype(name, buf, 0, &__err_code); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_ctype) 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_init(); 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid ctype_byname<char>::_M_init() { 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_ctype_table = _M_byname_table; 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // We have to do this, instead of just pointer twiddling, because 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // ctype_base::mask isn't the same type as _Locale_mask_t. 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Locale_mask_t* p = _Locale_ctype_table(_M_ctype); 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (size_t i = 0; i != table_size; ++i) { 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_byname_table[i] = ctype_base::mask(p[i]); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<char>::~ctype_byname() 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_ctype(_M_ctype); } 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar ctype_byname<char>::do_toupper(char c) const 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (char)_Locale_toupper(_M_ctype, c); } 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar ctype_byname<char>::do_tolower(char c) const 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (char)_Locale_tolower(_M_ctype, c); } 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char* 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<char>::do_toupper(char* first, const char* last) const { 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; first != last ; ++first) 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *first = (char)_Locale_toupper(_M_ctype, *first); 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return last; 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char* 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<char>::do_tolower(char* first, const char* last) const { 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; first != last ; ++first) 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *first = (char)_Locale_tolower(_M_ctype, *first); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return last; 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Some helper functions used in ctype<>::scan_is and scan_is_not. 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// ctype_byname<wchar_t> 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Ctype_byname_w_is_mask : public unary_function<wchar_t, bool> { 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_mask_t M; 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_ctype* M_ctp; 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Ctype_byname_w_is_mask(_Locale_mask_t m, _Locale_ctype* c) 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : M(m), M_ctp(c) {} 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator()(wchar_t c) const 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return _WLocale_ctype(M_ctp, c, M) != 0; } 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t>::ctype_byname(const char* name, size_t refs) 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : ctype<wchar_t>(refs) { 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_ctype = _STLP_PRIV __acquire_ctype(name, buf, 0, &__err_code); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_ctype) 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t>::~ctype_byname() 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_ctype(_M_ctype); } 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool ctype_byname<wchar_t>::do_is(ctype_base::mask m, wchar_t c) const 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_ctype(_M_ctype, c, (_Locale_mask_t)m) != 0; } 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t>::do_is(const wchar_t* low, const wchar_t* high, 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::mask * m) const { 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_mask_t all_bits = _Locale_mask_t(ctype_base::space | 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::print | 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::cntrl | 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::upper | 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::lower | 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::alpha | 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::digit | 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::punct | 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::xdigit); 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; low < high; ++low, ++m) 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *m = ctype_base::mask (_WLocale_ctype(_M_ctype, *low, all_bits)); 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return high; 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t> 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ::do_scan_is(ctype_base::mask m, const wchar_t* low, const wchar_t* high) const 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return find_if(low, high, _STLP_PRIV _Ctype_byname_w_is_mask(m, _M_ctype)); } 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t> 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ::do_scan_not(ctype_base::mask m, const wchar_t* low, const wchar_t* high) const 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return find_if(low, high, not1(_STLP_PRIV _Ctype_byname_w_is_mask(m, _M_ctype))); } 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t ctype_byname<wchar_t>::do_toupper(wchar_t c) const 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_toupper(_M_ctype, c); } 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t>::do_toupper(wchar_t* low, const wchar_t* high) const { 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; low < high; ++low) 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *low = _WLocale_toupper(_M_ctype, *low); 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return high; 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t ctype_byname<wchar_t>::do_tolower(wchar_t c) const 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_tolower(_M_ctype, c); } 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype_byname<wchar_t>::do_tolower(wchar_t* low, const wchar_t* high) const { 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; low < high; ++low) 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *low = _WLocale_tolower(_M_ctype, *low); 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return high; 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* WCHAR_T */ 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// collate_byname<char> 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<char>::collate_byname(const char* name, size_t refs) 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : collate<char>(refs) { 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_collate = _STLP_PRIV __acquire_collate(name, buf, 0, &__err_code); 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_collate) 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "collate"); 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<char>::~collate_byname() 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_collate(_M_collate); } 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint collate_byname<char>::do_compare(const char* __low1, 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char* __high1, 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char* __low2, 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char* __high2) const { 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_strcmp(_M_collate, 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __low1, __high1 - __low1, 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __low2, __high2 - __low2); 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<char>::string_type 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<char>::do_transform(const char* low, const char* high) const { 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (low == high) 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return string_type(); 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t n = _Locale_strxfrm(_M_collate, NULL, 0, low, high - low); 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // NOT PORTABLE. What we're doing relies on internal details of the 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // string implementation. (Contiguity of string elements and presence 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // of trailing zero.) 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string_type buf(n, 0); 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_strxfrm(_M_collate, &(*buf.begin()), n + 1, low, high - low); 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return buf; 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// collate_byname<wchar_t> 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<wchar_t>::collate_byname(const char* name, size_t refs) 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : collate<wchar_t>(refs) { 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_collate = _STLP_PRIV __acquire_collate(name, buf, 0, &__err_code); 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_collate) 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "collate"); 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<wchar_t>::~collate_byname() 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_collate(_M_collate); } 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint collate_byname<wchar_t>::do_compare(const wchar_t* low1, 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t* high1, 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t* low2, 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t* high2) const { 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _WLocale_strcmp(_M_collate, 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott low1, high1 - low1, 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott low2, high2 - low2); 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<wchar_t>::string_type 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcollate_byname<wchar_t>::do_transform(const wchar_t* low, 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t* high) const { 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (low == high) 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return string_type(); 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t n = _WLocale_strxfrm(_M_collate, NULL, 0, low, high - low); 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // NOT PORTABLE. What we're doing relies on internal details of the 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // string implementation. (Contiguity of string elements and presence 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // of trailing zero.) 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string_type buf(n, 0); 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _WLocale_strxfrm(_M_collate, &(*buf.begin()), n + 1, low, high - low); 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return buf; 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_NO_WCHAR_T */ 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//---------------------------------------------------------------------- 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// codecvt_byname<char> 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<char, char, mbstate_t> 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ::codecvt_byname(const char* name, size_t refs) 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : codecvt<char, char, mbstate_t>(refs) { 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<char, char, mbstate_t>::~codecvt_byname() {} 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//---------------------------------------------------------------------- 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// codecvt_byname<wchar_t> 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::codecvt_byname(const char* name, size_t refs) 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : codecvt<wchar_t, char, mbstate_t>(refs) { 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_codecvt = _STLP_PRIV __acquire_codecvt(name, buf, 0, &__err_code); 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_codecvt) 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "ctype"); 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::~codecvt_byname() 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_codecvt(_M_codecvt); } 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt<wchar_t, char, mbstate_t>::result 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_out(state_type& state, 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const intern_type* from, 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const intern_type* from_end, 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const intern_type*& from_next, 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type* to, 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type* to_limit, 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type*& to_next) const { 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while (from != from_end && to != to_limit) { 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t chars_stored = _WLocale_wctomb(_M_codecvt, 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to, to_limit - to, *from, 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott &state); 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (chars_stored == (size_t) -1) { 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return error; 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else if (chars_stored == (size_t) -2) { 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return partial; 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ++from; 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to += chars_stored; 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ok; 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt<wchar_t, char, mbstate_t>::result 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_in(state_type& state, 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const extern_type* from, 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const extern_type* from_end, 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const extern_type*& from_next, 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intern_type* to, 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intern_type* to_end, 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intern_type*& to_next) const { 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while (from != from_end && to != to_end) { 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t chars_read = _WLocale_mbtowc(_M_codecvt, 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to, from, from_end - from, 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott &state); 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (chars_read == (size_t) -1) { 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return error; 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (chars_read == (size_t) -2) { 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return partial; 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from += chars_read; 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to++; 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from_next = from; 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ok; 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt<wchar_t, char, mbstate_t>::result 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_unshift(state_type& state, 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type* to, 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type* to_limit, 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott extern_type*& to_next) const { 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to_next = to; 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t result = _WLocale_unshift(_M_codecvt, &state, 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott to, to_limit - to, &to_next); 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (result == (size_t) -1) 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return error; 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else if (result == (size_t) -2) 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return partial; 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__ISCPP__) 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return /*to_next == to ? noconv :*/ ok; 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return to_next == to ? noconv : ok; 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_encoding() const _STLP_NOTHROW { 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_WLocale_is_stateless(_M_codecvt)) { 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int max_width = _WLocale_mb_cur_max(_M_codecvt); 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int min_width = _WLocale_mb_cur_min(_M_codecvt); 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return min_width == max_width ? min_width : 0; 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return -1; 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_always_noconv() const _STLP_NOTHROW 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return false; } 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_length(state_type& state, 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const extern_type* from, 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const extern_type* end, 409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t mx) const { 410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t __count = 0; 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while (from != end && mx--) { 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intern_type __dummy; 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t chars_read = _WLocale_mbtowc(_M_codecvt, 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott &__dummy, from, end - from, 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott &state); 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((chars_read == (size_t) -1) || (chars_read == (size_t) -2)) // error or partial 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __count += chars_read; 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott from += chars_read; 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return int(__count); 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcodecvt_byname<wchar_t, char, mbstate_t>::do_max_length() const _STLP_NOTHROW 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_mb_cur_max(_M_codecvt); } 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// numpunct_byname<char> 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnumpunct_byname<char>::numpunct_byname(const char* name, size_t refs) 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott: numpunct<char>(refs) { 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_numeric = _STLP_PRIV __acquire_numeric(name, buf, 0, &__err_code); 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_numeric) 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "numpunct"); 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnumpunct_byname<char>::~numpunct_byname() 443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_numeric(_M_numeric); } 444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar numpunct_byname<char>::do_decimal_point() const 446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_decimal_point(_M_numeric); } 447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar numpunct_byname<char>::do_thousands_sep() const 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_thousands_sep(_M_numeric); } 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring numpunct_byname<char>::do_grouping() const { 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char * __grouping = _Locale_grouping(_M_numeric); 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__grouping != NULL && __grouping[0] == CHAR_MAX) 454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __grouping = ""; 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __grouping; 456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring numpunct_byname<char>::do_truename() const 459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_true(_M_numeric); } 460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring numpunct_byname<char>::do_falsename() const 462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_false(_M_numeric); } 463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//---------------------------------------------------------------------- 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// numpunct<wchar_t> 466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// numpunct_byname<wchar_t> 470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnumpunct_byname<wchar_t>::numpunct_byname(const char* name, size_t refs) 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott: numpunct<wchar_t>(refs) { 473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_numeric = _STLP_PRIV __acquire_numeric(name, buf, 0, &__err_code); 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_numeric) 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "numpunct"); 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnumpunct_byname<wchar_t>::~numpunct_byname() 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_numeric(_M_numeric); } 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t numpunct_byname<wchar_t>::do_decimal_point() const 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_decimal_point(_M_numeric); } 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t numpunct_byname<wchar_t>::do_thousands_sep() const 490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _WLocale_thousands_sep(_M_numeric); } 491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring numpunct_byname<wchar_t>::do_grouping() const { 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char * __grouping = _Locale_grouping(_M_numeric); 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__grouping != NULL && __grouping[0] == CHAR_MAX) 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __grouping = ""; 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __grouping; 497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring numpunct_byname<wchar_t>::do_truename() const { 500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t buf[16]; 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _WLocale_true(_M_numeric, _STLP_ARRAY_AND_SIZE(buf)); 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring numpunct_byname<wchar_t>::do_falsename() const { 505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t buf[16]; 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _WLocale_false(_M_numeric, _STLP_ARRAY_AND_SIZE(buf)); 507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void _Init_monetary_formats(money_base::pattern& pos_format, 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott money_base::pattern& neg_format, 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_monetary * monetary) { 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott switch (_Locale_p_sign_posn(monetary)) { 517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 0: // Parentheses surround the quantity and currency symbol 518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 1: // The sign string precedes the quantity and currency symbol 519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::sign; 520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_cs_precedes(monetary)) { 521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a positive value 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::symbol; 523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::space; 526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::value; 527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a positive value 534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::value; 535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::space; 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::symbol; 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::symbol; 542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 2: // The sign string succeeds the quantity and currency symbol. 547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_cs_precedes(monetary)) { 548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a positive value 549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::space; 553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::sign; 555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::value; 558e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::sign; 559e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 560e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 561e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 562e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a positive value 563e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::value; 564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 565e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::space; 567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::symbol; 568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::sign; 569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::symbol; 572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::sign; 573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 3: // The sign string immediately precedes the currency symbol. 578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_cs_precedes(monetary)) { 579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a positive value 580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::sign; 581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::symbol; 582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 584e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::space; 585e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::value; 586e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 587e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 590e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 591e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 592e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a positive value 593e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::value; 594e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::symbol; 596e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 597e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 4: // The sign string immediately succeeds the currency symbol. 600e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_cs_precedes(monetary)) { 601e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a positive value 602e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 605e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a positive value 608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::value; 609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_sep_by_space(monetary)) { 610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a positive value. 611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::space; 612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::symbol; 613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::sign; 614e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a positive value. 616e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::symbol; 617e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::sign; 618e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 619e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 620e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 621e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott default: // Default C++ Standard format 623e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 624e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 625e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::none; 626e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::value; 627e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 628e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 629e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 630e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott switch (_Locale_n_sign_posn(monetary)) { 631e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 0: // Parentheses surround the quantity and currency symbol 632e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 1: // The sign string precedes the quantity and currency symbol 633e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::sign; 634e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_cs_precedes(monetary)) { 635e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a negative value 636e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::symbol; 637e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 638e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 639e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::space; 640e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::value; 641e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 642e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 643e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::value; 644e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 645e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 646e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 647e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a negative value 648e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::value; 649e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 650e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 651e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::space; 652e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::symbol; 653e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 654e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 655e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::symbol; 656e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 657e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 658e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 659e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 660e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 2: // The sign string succeeds the quantity and currency symbol. 661e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_cs_precedes(monetary)) { 662e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a negative value 663e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 664e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 665e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 666e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::space; 667e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::value; 668e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::sign; 669e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 670e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 671e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::value; 672e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::sign; 673e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 674e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 675e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 676e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a negative value 677e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::value; 678e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 679e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 680e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::space; 681e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::symbol; 682e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::sign; 683e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 684e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 685e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::symbol; 686e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::sign; 687e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 688e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 689e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 690e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 691e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 3: // The sign string immediately precedes the currency symbol. 692e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_cs_precedes(monetary)) { 693e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a negative value 694e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::sign; 695e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::symbol; 696e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 697e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 698e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::space; 699e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::value; 700e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 701e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 702e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::value; 703e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 704e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 705e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 706e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a negative value 707e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::value; 708e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 709e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::symbol; 710e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 711e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 712e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 713e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 4: // The sign string immediately succeeds the currency symbol. 714e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_cs_precedes(monetary)) { 715e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a negative value 716e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 717e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 718e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::none; 719e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::value; 720e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 721e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a negative value 722e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::value; 723e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_sep_by_space(monetary)) { 724e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space separates currency symbol from a negative value. 725e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::space; 726e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::symbol; 727e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::sign; 728e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 729e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a space not separates currency symbol from a negative value. 730e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::symbol; 731e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::sign; 732e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 733e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 734e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 735e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 736e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott default: // Default C++ Standard format 737e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 738e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 739e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::none; 740e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::value; 741e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 742e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 743e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 744e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 745e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// international variant of monetary 746e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 747e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 748e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * int_curr_symbol 749e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 750e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The international currency symbol. The operand is a four-character 751e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * string, with the first three characters containing the alphabetic 752e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * international currency symbol in accordance with those specified 753e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in the ISO 4217 specification. The fourth character is the character used 754e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * to separate the international currency symbol from the monetary quantity. 755e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 756e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html) 757e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 758e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 759e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 760e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Standards are unclear in the usage of international currency 761e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and monetary formats. 762e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * But I am expect that international currency symbol should be the first 763e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * (not depends upon where currency symbol situated in the national 764e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * format). 765e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 766e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * If this isn't so, let's see: 767e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 1 234.56 RUR 768e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * GBP 1,234.56 769e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * USD 1,234.56 770e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The situation really is worse than you see above: 771e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * RUR typed wrong here---it prints '1 234.56 RUR ' (see space after RUR). 772e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This is due to intl_fmp.curr_symbol() == "RUR ". (see reference in comments 773e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * above). 774e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 775e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 776e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 777e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void _Init_monetary_formats_int(money_base::pattern& pos_format, 778e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott money_base::pattern& neg_format, 779e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_monetary * monetary) 780e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 781e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 782e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott switch (_Locale_p_sign_posn(monetary)) { 783e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 0: // Parentheses surround the quantity and currency symbol 784e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 1: // The sign string precedes the quantity and currency symbol 785e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 786e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 787e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 788e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 789e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 790e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 2: // The sign string succeeds the quantity and currency symbol. 791e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 792e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::value; 793e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::sign; 794e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 795e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 796e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 3: // The sign string immediately precedes the currency symbol. 797e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 4: // The sign string immediately succeeds the currency symbol. 798e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 799e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_p_cs_precedes(monetary)) { 800e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a positive value 801e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 802e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::value; 803e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 804e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a positive value 805e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::value; 806e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::sign; 807e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 808e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::none; 809e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 810e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott default: // Default C++ Standard format 811e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[0] = (char) money_base::symbol; 812e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[1] = (char) money_base::sign; 813e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[2] = (char) money_base::none; 814e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pos_format.field[3] = (char) money_base::value; 815e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 816e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 817e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 818e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 819e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott switch (_Locale_n_sign_posn(monetary)) { 820e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 0: // Parentheses surround the quantity and currency symbol 821e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 1: // The sign string precedes the quantity and currency symbol 822e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 823e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 824e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::value; 825e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 826e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 827e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 2: // The sign string succeeds the quantity and currency symbol. 828e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 829e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::value; 830e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::sign; 831e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 832e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 833e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 3: // The sign string immediately precedes the currency symbol. 834e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott case 4: // The sign string immediately succeeds the currency symbol. 835e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 836e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (_Locale_n_cs_precedes(monetary)) { 837e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 1 if currency symbol precedes a negative value 838e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 839e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::value; 840e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } else { 841e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 0 if currency symbol succeeds a negative value 842e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::value; 843e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::sign; 844e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 845e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::none; 846e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 847e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott default: // Default C++ Standard format 848e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[0] = (char) money_base::symbol; 849e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[1] = (char) money_base::sign; 850e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[2] = (char) money_base::none; 851e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott neg_format.field[3] = (char) money_base::value; 852e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott break; 853e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 854e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 855e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 856e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 857e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 858e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 859e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// moneypunct_byname<> 860e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 861e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, true>::moneypunct_byname(const char * name, 862e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t refs) 863e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : moneypunct<char, true>(refs) { 864e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 865e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 866e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 867e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 868e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 869e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 870e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_monetary) 871e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 872e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 873e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 874e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 875e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 876e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, true>::moneypunct_byname(_Locale_monetary *__mon) 877e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _M_monetary(__mon) { 878e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 879e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 880e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 881e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, true>::~moneypunct_byname() 882e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_monetary(_M_monetary); } 883e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 884e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar moneypunct_byname<char, true>::do_decimal_point() const 885e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_decimal_point(_M_monetary); } 886e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 887e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar moneypunct_byname<char, true>::do_thousands_sep() const 888e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_thousands_sep(_M_monetary); } 889e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 890e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, true>::do_grouping() const 891e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_grouping(_M_monetary); } 892e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 893e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, true>::do_curr_symbol() const 894e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_int_curr_symbol(_M_monetary); } 895e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 896e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, true>::do_positive_sign() const 897e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_positive_sign(_M_monetary); } 898e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 899e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, true>::do_negative_sign() const 900e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_negative_sign(_M_monetary); } 901e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 902e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint moneypunct_byname<char, true>::do_frac_digits() const 903e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_int_frac_digits(_M_monetary); } 904e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 905e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, false>::moneypunct_byname(const char * name, 906e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t refs) 907e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : moneypunct<char, false>(refs) { 908e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 909e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 910e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 911e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 912e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 913e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 914e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_monetary) 915e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 916e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 917e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 918e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 919e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 920e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, false>::moneypunct_byname(_Locale_monetary *__mon) 921e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _M_monetary(__mon) { 922e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 923e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 924e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 925e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<char, false>::~moneypunct_byname() 926e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_monetary(_M_monetary); } 927e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 928e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar moneypunct_byname<char, false>::do_decimal_point() const 929e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_decimal_point(_M_monetary); } 930e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 931e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar moneypunct_byname<char, false>::do_thousands_sep() const 932e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_thousands_sep(_M_monetary); } 933e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 934e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, false>::do_grouping() const 935e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_grouping(_M_monetary); } 936e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 937e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, false>::do_curr_symbol() const 938e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_currency_symbol(_M_monetary); } 939e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 940e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, false>::do_positive_sign() const 941e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_positive_sign(_M_monetary); } 942e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 943e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<char, false>::do_negative_sign() const 944e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_negative_sign(_M_monetary); } 945e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 946e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint moneypunct_byname<char, false>::do_frac_digits() const 947e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_frac_digits(_M_monetary); } 948e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 949e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 950e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// moneypunct_byname<wchar_t> 951e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 952e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 953e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 954e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, true>::moneypunct_byname(const char * name, 955e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t refs) 956e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : moneypunct<wchar_t, true>(refs) { 957e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 958e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name(); 959e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 960e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 961e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 962e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 963e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_monetary) 964e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 965e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 966e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 967e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 968e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 969e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, true>::moneypunct_byname(_Locale_monetary *__mon) 970e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _M_monetary(__mon) { 971e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary); 972e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 973e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 974e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, true>::~moneypunct_byname() 975e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_monetary(_M_monetary); } 976e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 977e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t moneypunct_byname<wchar_t, true>::do_decimal_point() const 978e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_decimal_point(_M_monetary); } 979e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 980e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t moneypunct_byname<wchar_t, true>::do_thousands_sep() const 981e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_thousands_sep(_M_monetary); } 982e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 983e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<wchar_t, true>::do_grouping() const 984e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_grouping(_M_monetary); } 985e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 986e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline wstring __do_widen (string const& str) { 987e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NO_MEMBER_TEMPLATES) || defined (_STLP_MSVC) 988e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wstring::_Reserve_t __Reserve; 989e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t __size = str.size(); 990e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wstring result(__Reserve, __size); 991e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott copy(str.begin(), str.end(), result.begin()); 992e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 993e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wstring result(str.begin(), str.end()); 994e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 995e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return result; 996e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 997e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 998e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, true>::do_curr_symbol() const 999e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_int_curr_symbol(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1000e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1001e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, true>::do_positive_sign() const 1002e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_positive_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1003e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1004e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, true>::do_negative_sign() const 1005e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_negative_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1006e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1007e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint moneypunct_byname<wchar_t, true>::do_frac_digits() const 1008e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_int_frac_digits(_M_monetary); } 1009e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1010e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, false>::moneypunct_byname(const char * name, 1011e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t refs) 1012e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : moneypunct<wchar_t, false>(refs) { 1013e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!name) 1014e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_null_name() ; 1015e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1016e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __err_code; 1017e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf[_Locale_MAX_SIMPLE_NAME]; 1018e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_monetary = _STLP_PRIV __acquire_monetary(name, buf, 0, &__err_code); 1019e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (!_M_monetary) 1020e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::_M_throw_on_creation_failure(__err_code, name, "moneypunct"); 1021e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1022e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 1023e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 1024e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1025e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, false>::moneypunct_byname(_Locale_monetary *__mon) 1026e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _M_monetary(__mon) { 1027e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary); 1028e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 1029e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1030e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmoneypunct_byname<wchar_t, false>::~moneypunct_byname() 1031e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __release_monetary(_M_monetary); } 1032e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1033e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t moneypunct_byname<wchar_t, false>::do_decimal_point() const 1034e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_decimal_point(_M_monetary); } 1035e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1036e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t moneypunct_byname<wchar_t, false>::do_thousands_sep() const 1037e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_thousands_sep(_M_monetary); } 1038e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1039e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring moneypunct_byname<wchar_t, false>::do_grouping() const 1040e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_mon_grouping(_M_monetary); } 1041e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1042e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, false>::do_curr_symbol() const 1043e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_currency_symbol(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1044e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1045e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, false>::do_positive_sign() const 1046e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_positive_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1047e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1048e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring moneypunct_byname<wchar_t, false>::do_negative_sign() const 1049e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ wchar_t buf[16]; return _WLocale_negative_sign(_M_monetary, _STLP_ARRAY_AND_SIZE(buf)); } 1050e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1051e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint moneypunct_byname<wchar_t, false>::do_frac_digits() const 1052e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _Locale_frac_digits(_M_monetary); } 1053e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1054e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1055e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1056e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE 1057e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1058