KiCad PCB EDA Suite
LOCALE_IO Class Reference

Instantiate the current locale within a scope in which you are expecting exceptions to be thrown. More...

#include <locale_io.h>

Public Member Functions

 LOCALE_IO ()
 
 ~LOCALE_IO ()
 

Private Attributes

std::string m_user_locale
 
wxLocale * m_wxLocale
 

Static Private Attributes

static std::atomic< unsigned int > m_c_count
 

Detailed Description

Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.

The constructor sets a "C" language locale option, to read/print files with floating point numbers. The destructor insures that the default locale is restored whether an exception is thrown or not.

Definition at line 40 of file locale_io.h.

Constructor & Destructor Documentation

◆ LOCALE_IO()

LOCALE_IO::LOCALE_IO ( )

Definition at line 78 of file locale_io.cpp.

78 : m_wxLocale( nullptr )
79{
80 // use thread safe, atomic operation
81 if( m_c_count++ == 0 )
82 {
83#if USE_WXLOCALE
84 #define C_LANG "C"
85 m_wxLocale = new wxLocale( C_LANG, C_LANG, C_LANG, false );
86#else
87 // Store the user locale name, to restore this locale later, in dtor
88 m_user_locale = setlocale( LC_NUMERIC, nullptr );
89#if defined( _WIN32 ) && defined( DEBUG )
90 // Disable wxWidgets alerts
91 wxSetAssertHandler( KiAssertFilter );
92#endif
93 // Switch the locale to C locale, to read/write files with fp numbers
94 setlocale( LC_NUMERIC, "C" );
95#endif
96 }
97}
wxLocale * m_wxLocale
Definition: locale_io.h:55
static std::atomic< unsigned int > m_c_count
Definition: locale_io.h:48
std::string m_user_locale
Definition: locale_io.h:52

References m_c_count, m_user_locale, and m_wxLocale.

◆ ~LOCALE_IO()

LOCALE_IO::~LOCALE_IO ( )

Definition at line 100 of file locale_io.cpp.

101{
102 // use thread safe, atomic operation
103 if( --m_c_count == 0 )
104 {
105 // revert to the user locale
106#if USE_WXLOCALE
107 delete m_wxLocale; // Deleting m_wxLocale restored previous locale
108 m_wxLocale = nullptr;
109#else
110 setlocale( LC_NUMERIC, m_user_locale.c_str() );
111#if defined( _WIN32 ) && defined( DEBUG )
112 // Enable wxWidgets alerts
113 wxSetDefaultAssertHandler();
114#endif
115#endif
116 }
117}

References m_c_count, m_user_locale, and m_wxLocale.

Member Data Documentation

◆ m_c_count

std::atomic< unsigned int > LOCALE_IO::m_c_count
staticprivate

Definition at line 48 of file locale_io.h.

Referenced by LOCALE_IO(), and ~LOCALE_IO().

◆ m_user_locale

std::string LOCALE_IO::m_user_locale
private

Definition at line 52 of file locale_io.h.

Referenced by LOCALE_IO(), and ~LOCALE_IO().

◆ m_wxLocale

wxLocale* LOCALE_IO::m_wxLocale
private

Definition at line 55 of file locale_io.h.

Referenced by LOCALE_IO(), and ~LOCALE_IO().


The documentation for this class was generated from the following files: