1*e4b17023SJohn Marino // std::moneypunct implementation details, generic version -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 4*e4b17023SJohn Marino // Free Software Foundation, Inc. 5*e4b17023SJohn Marino // 6*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 7*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the 8*e4b17023SJohn Marino // terms of the GNU General Public License as published by the 9*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option) 10*e4b17023SJohn Marino // any later version. 11*e4b17023SJohn Marino 12*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, 13*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of 14*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*e4b17023SJohn Marino // GNU General Public License for more details. 16*e4b17023SJohn Marino 17*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 18*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 19*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 20*e4b17023SJohn Marino 21*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 22*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 23*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 25*e4b17023SJohn Marino 26*e4b17023SJohn Marino // 27*e4b17023SJohn Marino // ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions 28*e4b17023SJohn Marino // 29*e4b17023SJohn Marino 30*e4b17023SJohn Marino // Written by Benjamin Kosnik <bkoz@redhat.com> 31*e4b17023SJohn Marino 32*e4b17023SJohn Marino #include <locale> 33*e4b17023SJohn Marino 34*e4b17023SJohn Marino namespace std _GLIBCXX_VISIBILITY(default) 35*e4b17023SJohn Marino { 36*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION 37*e4b17023SJohn Marino 38*e4b17023SJohn Marino // Construct and return valid pattern consisting of some combination of: 39*e4b17023SJohn Marino // space none symbol sign value 40*e4b17023SJohn Marino money_base::pattern _S_construct_pattern(char,char,char)41*e4b17023SJohn Marino money_base::_S_construct_pattern(char, char, char) throw() 42*e4b17023SJohn Marino { return _S_default_pattern; } 43*e4b17023SJohn Marino 44*e4b17023SJohn Marino template<> 45*e4b17023SJohn Marino void _M_initialize_moneypunct(__c_locale,const char *)46*e4b17023SJohn Marino moneypunct<char, true>::_M_initialize_moneypunct(__c_locale, const char*) 47*e4b17023SJohn Marino { 48*e4b17023SJohn Marino // "C" locale. 49*e4b17023SJohn Marino if (!_M_data) 50*e4b17023SJohn Marino _M_data = new __moneypunct_cache<char, true>; 51*e4b17023SJohn Marino 52*e4b17023SJohn Marino _M_data->_M_decimal_point = '.'; 53*e4b17023SJohn Marino _M_data->_M_thousands_sep = ','; 54*e4b17023SJohn Marino _M_data->_M_grouping = ""; 55*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 56*e4b17023SJohn Marino _M_data->_M_curr_symbol = ""; 57*e4b17023SJohn Marino _M_data->_M_curr_symbol_size = 0; 58*e4b17023SJohn Marino _M_data->_M_positive_sign = ""; 59*e4b17023SJohn Marino _M_data->_M_positive_sign_size = 0; 60*e4b17023SJohn Marino _M_data->_M_negative_sign = ""; 61*e4b17023SJohn Marino _M_data->_M_negative_sign_size = 0; 62*e4b17023SJohn Marino _M_data->_M_frac_digits = 0; 63*e4b17023SJohn Marino _M_data->_M_pos_format = money_base::_S_default_pattern; 64*e4b17023SJohn Marino _M_data->_M_neg_format = money_base::_S_default_pattern; 65*e4b17023SJohn Marino 66*e4b17023SJohn Marino for (size_t __i = 0; __i < money_base::_S_end; ++__i) 67*e4b17023SJohn Marino _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; 68*e4b17023SJohn Marino } 69*e4b17023SJohn Marino 70*e4b17023SJohn Marino template<> 71*e4b17023SJohn Marino void _M_initialize_moneypunct(__c_locale,const char *)72*e4b17023SJohn Marino moneypunct<char, false>::_M_initialize_moneypunct(__c_locale, const char*) 73*e4b17023SJohn Marino { 74*e4b17023SJohn Marino // "C" locale. 75*e4b17023SJohn Marino if (!_M_data) 76*e4b17023SJohn Marino _M_data = new __moneypunct_cache<char, false>; 77*e4b17023SJohn Marino 78*e4b17023SJohn Marino _M_data->_M_decimal_point = '.'; 79*e4b17023SJohn Marino _M_data->_M_thousands_sep = ','; 80*e4b17023SJohn Marino _M_data->_M_grouping = ""; 81*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 82*e4b17023SJohn Marino _M_data->_M_curr_symbol = ""; 83*e4b17023SJohn Marino _M_data->_M_curr_symbol_size = 0; 84*e4b17023SJohn Marino _M_data->_M_positive_sign = ""; 85*e4b17023SJohn Marino _M_data->_M_positive_sign_size = 0; 86*e4b17023SJohn Marino _M_data->_M_negative_sign = ""; 87*e4b17023SJohn Marino _M_data->_M_negative_sign_size = 0; 88*e4b17023SJohn Marino _M_data->_M_frac_digits = 0; 89*e4b17023SJohn Marino _M_data->_M_pos_format = money_base::_S_default_pattern; 90*e4b17023SJohn Marino _M_data->_M_neg_format = money_base::_S_default_pattern; 91*e4b17023SJohn Marino 92*e4b17023SJohn Marino for (size_t __i = 0; __i < money_base::_S_end; ++__i) 93*e4b17023SJohn Marino _M_data->_M_atoms[__i] = money_base::_S_atoms[__i]; 94*e4b17023SJohn Marino } 95*e4b17023SJohn Marino 96*e4b17023SJohn Marino template<> ~moneypunct()97*e4b17023SJohn Marino moneypunct<char, true>::~moneypunct() 98*e4b17023SJohn Marino { delete _M_data; } 99*e4b17023SJohn Marino 100*e4b17023SJohn Marino template<> ~moneypunct()101*e4b17023SJohn Marino moneypunct<char, false>::~moneypunct() 102*e4b17023SJohn Marino { delete _M_data; } 103*e4b17023SJohn Marino 104*e4b17023SJohn Marino #ifdef _GLIBCXX_USE_WCHAR_T 105*e4b17023SJohn Marino template<> 106*e4b17023SJohn Marino void _M_initialize_moneypunct(__c_locale,const char *)107*e4b17023SJohn Marino moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale, 108*e4b17023SJohn Marino const char*) 109*e4b17023SJohn Marino { 110*e4b17023SJohn Marino // "C" locale 111*e4b17023SJohn Marino if (!_M_data) 112*e4b17023SJohn Marino _M_data = new __moneypunct_cache<wchar_t, true>; 113*e4b17023SJohn Marino 114*e4b17023SJohn Marino _M_data->_M_decimal_point = L'.'; 115*e4b17023SJohn Marino _M_data->_M_thousands_sep = L','; 116*e4b17023SJohn Marino _M_data->_M_grouping = ""; 117*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 118*e4b17023SJohn Marino _M_data->_M_curr_symbol = L""; 119*e4b17023SJohn Marino _M_data->_M_curr_symbol_size = 0; 120*e4b17023SJohn Marino _M_data->_M_positive_sign = L""; 121*e4b17023SJohn Marino _M_data->_M_positive_sign_size = 0; 122*e4b17023SJohn Marino _M_data->_M_negative_sign = L""; 123*e4b17023SJohn Marino _M_data->_M_negative_sign_size = 0; 124*e4b17023SJohn Marino _M_data->_M_frac_digits = 0; 125*e4b17023SJohn Marino _M_data->_M_pos_format = money_base::_S_default_pattern; 126*e4b17023SJohn Marino _M_data->_M_neg_format = money_base::_S_default_pattern; 127*e4b17023SJohn Marino 128*e4b17023SJohn Marino for (size_t __i = 0; __i < money_base::_S_end; ++__i) 129*e4b17023SJohn Marino _M_data->_M_atoms[__i] = 130*e4b17023SJohn Marino static_cast<wchar_t>(money_base::_S_atoms[__i]); 131*e4b17023SJohn Marino } 132*e4b17023SJohn Marino 133*e4b17023SJohn Marino template<> 134*e4b17023SJohn Marino void _M_initialize_moneypunct(__c_locale,const char *)135*e4b17023SJohn Marino moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale, 136*e4b17023SJohn Marino const char*) 137*e4b17023SJohn Marino { 138*e4b17023SJohn Marino // "C" locale 139*e4b17023SJohn Marino if (!_M_data) 140*e4b17023SJohn Marino _M_data = new __moneypunct_cache<wchar_t, false>; 141*e4b17023SJohn Marino 142*e4b17023SJohn Marino _M_data->_M_decimal_point = L'.'; 143*e4b17023SJohn Marino _M_data->_M_thousands_sep = L','; 144*e4b17023SJohn Marino _M_data->_M_grouping = ""; 145*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 146*e4b17023SJohn Marino _M_data->_M_curr_symbol = L""; 147*e4b17023SJohn Marino _M_data->_M_curr_symbol_size = 0; 148*e4b17023SJohn Marino _M_data->_M_positive_sign = L""; 149*e4b17023SJohn Marino _M_data->_M_positive_sign_size = 0; 150*e4b17023SJohn Marino _M_data->_M_negative_sign = L""; 151*e4b17023SJohn Marino _M_data->_M_negative_sign_size = 0; 152*e4b17023SJohn Marino _M_data->_M_frac_digits = 0; 153*e4b17023SJohn Marino _M_data->_M_pos_format = money_base::_S_default_pattern; 154*e4b17023SJohn Marino _M_data->_M_neg_format = money_base::_S_default_pattern; 155*e4b17023SJohn Marino 156*e4b17023SJohn Marino for (size_t __i = 0; __i < money_base::_S_end; ++__i) 157*e4b17023SJohn Marino _M_data->_M_atoms[__i] = 158*e4b17023SJohn Marino static_cast<wchar_t>(money_base::_S_atoms[__i]); 159*e4b17023SJohn Marino } 160*e4b17023SJohn Marino 161*e4b17023SJohn Marino template<> ~moneypunct()162*e4b17023SJohn Marino moneypunct<wchar_t, true>::~moneypunct() 163*e4b17023SJohn Marino { delete _M_data; } 164*e4b17023SJohn Marino 165*e4b17023SJohn Marino template<> ~moneypunct()166*e4b17023SJohn Marino moneypunct<wchar_t, false>::~moneypunct() 167*e4b17023SJohn Marino { delete _M_data; } 168*e4b17023SJohn Marino #endif 169*e4b17023SJohn Marino 170*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION 171*e4b17023SJohn Marino } // namespace 172