1 /* 2 * This program source code file is part of KiCad, a free EDA CAD application. 3 * 4 * Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, you may find one here: 18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 19 * or you may search the http://www.gnu.org website for the version 2 license, 20 * or you may write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 22 */ 23 24 #ifndef LOCALE_IO_H 25 #define LOCALE_IO_H 26 27 #include <atomic> 28 #include <string> 29 30 class wxLocale; 31 32 /** 33 * Instantiate the current locale within a scope in which you are expecting 34 * exceptions to be thrown. 35 * 36 * The constructor sets a "C" language locale option, to read/print files with floating 37 * point numbers. The destructor insures that the default locale is restored if an 38 * exception is thrown or not. 39 */ 40 class LOCALE_IO 41 { 42 public: 43 LOCALE_IO(); 44 ~LOCALE_IO(); 45 46 private: 47 // allow for nesting of LOCALE_IO instantiations 48 static std::atomic<unsigned int> m_c_count; 49 50 // The locale in use before switching to the "C" locale 51 // (the locale can be set by user, and is not always the system locale) 52 std::string m_user_locale; 53 wxLocale* m_wxLocale; 54 }; 55 56 #endif