Initialize wxCSConv immediately instead of deferring it.

Deferred initialization code was not MT-safe and just wasn't that useful
anyhow because it is rare to create a wxCSConv object and not use it
afterwards.

Remove the deferred initialization logic and create the real conversion used
by wxCSConv immediately in its ctor.

Also improve the comments by clearly explaining the possible values of
wxCSConv::m_name and m_encoding.

Closes #12630.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66119 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-11 12:09:22 +00:00
parent 93fdbfb70d
commit 6c4d607e60
2 changed files with 73 additions and 77 deletions

View File

@@ -522,31 +522,36 @@ private:
// common part of all ctors
void Init();
// creates m_convReal if necessary
void CreateConvIfNeeded() const;
// do create m_convReal (unconditionally)
// Creates the conversion to use, called from all ctors to initialize
// m_convReal.
wxMBConv *DoCreate() const;
// set the name (may be only called when m_name == NULL), makes copy of
// the charset string
// Set the name (may be only called when m_name == NULL), makes copy of
// the charset string.
void SetName(const char *charset);
// m_name may be NULL in which case m_encoding should be used
// Set m_encoding field respecting the rules below, i.e. making sure it has
// a valid value if m_name == NULL (thus this should be always called after
// SetName()).
//
// note that we can't use wxString here because of compilation
// dependencies: we're included from wx/string.h
// Input encoding may be valid or not.
void SetEncoding(wxFontEncoding encoding);
// The encoding we use is specified by the two fields below:
//
// 1. If m_name != NULL, m_encoding corresponds to it if it's one of
// encodings we know about (i.e. member of wxFontEncoding) or is
// wxFONTENCODING_SYSTEM otherwise.
//
// 2. If m_name == NULL, m_encoding is always valid, i.e. not one of
// wxFONTENCODING_{SYSTEM,DEFAULT,MAX}.
char *m_name;
// may be wxFONTENCODING_SYSTEM in which case m_name is used
//
// if m_name is NULL, then we should use the default system encoding
wxFontEncoding m_encoding;
// use CreateConvIfNeeded() before accessing m_convReal!
// The conversion object for our encoding or NULL if we failed to create it
// in which case we fall back to hard-coded ISO8859-1 conversion.
wxMBConv *m_convReal;
bool m_deferred;
};