1*e4b17023SJohn Marino // std::numpunct implementation details, generic version -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. 4*e4b17023SJohn Marino // 5*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 6*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the 7*e4b17023SJohn Marino // terms of the GNU General Public License as published by the 8*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option) 9*e4b17023SJohn Marino // any later version. 10*e4b17023SJohn Marino 11*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, 12*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of 13*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*e4b17023SJohn Marino // GNU General Public License for more details. 15*e4b17023SJohn Marino 16*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 17*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 18*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 19*e4b17023SJohn Marino 20*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 21*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 22*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 24*e4b17023SJohn Marino 25*e4b17023SJohn Marino // 26*e4b17023SJohn Marino // ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions 27*e4b17023SJohn Marino // 28*e4b17023SJohn Marino 29*e4b17023SJohn Marino // Written by Benjamin Kosnik <bkoz@redhat.com> 30*e4b17023SJohn Marino 31*e4b17023SJohn Marino #include <locale> 32*e4b17023SJohn Marino 33*e4b17023SJohn Marino namespace std _GLIBCXX_VISIBILITY(default) 34*e4b17023SJohn Marino { 35*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION 36*e4b17023SJohn Marino 37*e4b17023SJohn Marino template<> 38*e4b17023SJohn Marino void _M_initialize_numpunct(__c_locale)39*e4b17023SJohn Marino numpunct<char>::_M_initialize_numpunct(__c_locale) 40*e4b17023SJohn Marino { 41*e4b17023SJohn Marino // "C" locale 42*e4b17023SJohn Marino if (!_M_data) 43*e4b17023SJohn Marino _M_data = new __numpunct_cache<char>; 44*e4b17023SJohn Marino 45*e4b17023SJohn Marino _M_data->_M_grouping = ""; 46*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 47*e4b17023SJohn Marino _M_data->_M_use_grouping = false; 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino _M_data->_M_decimal_point = '.'; 50*e4b17023SJohn Marino _M_data->_M_thousands_sep = ','; 51*e4b17023SJohn Marino 52*e4b17023SJohn Marino for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) 53*e4b17023SJohn Marino _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i]; 54*e4b17023SJohn Marino 55*e4b17023SJohn Marino for (size_t __i = 0; __i < __num_base::_S_iend; ++__i) 56*e4b17023SJohn Marino _M_data->_M_atoms_in[__i] = __num_base::_S_atoms_in[__i]; 57*e4b17023SJohn Marino 58*e4b17023SJohn Marino _M_data->_M_truename = "true"; 59*e4b17023SJohn Marino _M_data->_M_truename_size = 4; 60*e4b17023SJohn Marino _M_data->_M_falsename = "false"; 61*e4b17023SJohn Marino _M_data->_M_falsename_size = 5; 62*e4b17023SJohn Marino } 63*e4b17023SJohn Marino 64*e4b17023SJohn Marino template<> ~numpunct()65*e4b17023SJohn Marino numpunct<char>::~numpunct() 66*e4b17023SJohn Marino { delete _M_data; } 67*e4b17023SJohn Marino 68*e4b17023SJohn Marino #ifdef _GLIBCXX_USE_WCHAR_T 69*e4b17023SJohn Marino template<> 70*e4b17023SJohn Marino void _M_initialize_numpunct(__c_locale)71*e4b17023SJohn Marino numpunct<wchar_t>::_M_initialize_numpunct(__c_locale) 72*e4b17023SJohn Marino { 73*e4b17023SJohn Marino // "C" locale 74*e4b17023SJohn Marino if (!_M_data) 75*e4b17023SJohn Marino _M_data = new __numpunct_cache<wchar_t>; 76*e4b17023SJohn Marino 77*e4b17023SJohn Marino _M_data->_M_grouping = ""; 78*e4b17023SJohn Marino _M_data->_M_grouping_size = 0; 79*e4b17023SJohn Marino _M_data->_M_use_grouping = false; 80*e4b17023SJohn Marino 81*e4b17023SJohn Marino _M_data->_M_decimal_point = L'.'; 82*e4b17023SJohn Marino _M_data->_M_thousands_sep = L','; 83*e4b17023SJohn Marino 84*e4b17023SJohn Marino // Use ctype::widen code without the facet... 85*e4b17023SJohn Marino for (size_t __i = 0; __i < __num_base::_S_oend; ++__i) 86*e4b17023SJohn Marino _M_data->_M_atoms_out[__i] = 87*e4b17023SJohn Marino static_cast<wchar_t>(__num_base::_S_atoms_out[__i]); 88*e4b17023SJohn Marino 89*e4b17023SJohn Marino for (size_t __i = 0; __i < __num_base::_S_iend; ++__i) 90*e4b17023SJohn Marino _M_data->_M_atoms_in[__i] = 91*e4b17023SJohn Marino static_cast<wchar_t>(__num_base::_S_atoms_in[__i]); 92*e4b17023SJohn Marino 93*e4b17023SJohn Marino _M_data->_M_truename = L"true"; 94*e4b17023SJohn Marino _M_data->_M_truename_size = 4; 95*e4b17023SJohn Marino _M_data->_M_falsename = L"false"; 96*e4b17023SJohn Marino _M_data->_M_falsename_size = 5; 97*e4b17023SJohn Marino } 98*e4b17023SJohn Marino 99*e4b17023SJohn Marino template<> ~numpunct()100*e4b17023SJohn Marino numpunct<wchar_t>::~numpunct() 101*e4b17023SJohn Marino { delete _M_data; } 102*e4b17023SJohn Marino #endif 103*e4b17023SJohn Marino 104*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION 105*e4b17023SJohn Marino } // namespace 106*e4b17023SJohn Marino 107