X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1dc9f8394c1488ad8e7d945e6f943f7b34554ce..21b2dde583e83d3ad455c20fa8db717037b5f548:/src/common/variant.cpp diff --git a/src/common/variant.cpp b/src/common/variant.cpp index fcff39ff5f..65fbed6a4f 100644 --- a/src/common/variant.cpp +++ b/src/common/variant.cpp @@ -23,6 +23,7 @@ #ifndef WX_PRECOMP #include "wx/string.h" #include "wx/math.h" + #include "wx/crt.h" #if wxUSE_STREAMS #include "wx/stream.h" #endif @@ -226,7 +227,7 @@ public: virtual bool Write(wxOutputStream &str) const; #endif // wxUSE_STREAMS - virtual wxString GetType() const { return wxT("long"); }; + virtual wxString GetType() const { return wxT("long"); } protected: long m_value; @@ -286,7 +287,7 @@ bool wxVariantDataLong::Read(wxInputStream& str) bool wxVariantDataLong::Read(wxString& str) { - m_value = wxAtol((const wxChar*) str); + m_value = wxAtol(str); return true; } @@ -377,7 +378,7 @@ public: virtual bool Read(wxInputStream& str); virtual bool Write(wxOutputStream &str) const; #endif // wxUSE_STREAMS - virtual wxString GetType() const { return wxT("double"); }; + virtual wxString GetType() const { return wxT("double"); } protected: double m_value; @@ -436,7 +437,7 @@ bool wxVariantDoubleData::Read(wxInputStream& str) bool wxVariantDoubleData::Read(wxString& str) { - m_value = wxAtof((const wxChar*) str); + m_value = wxAtof(str); return true; } @@ -517,7 +518,7 @@ public: virtual bool Read(wxInputStream& str); virtual bool Write(wxOutputStream& str) const; #endif // wxUSE_STREAMS - virtual wxString GetType() const { return wxT("bool"); }; + virtual wxString GetType() const { return wxT("bool"); } protected: bool m_value; @@ -579,7 +580,7 @@ bool wxVariantDataBool::Read(wxInputStream& str) bool wxVariantDataBool::Read(wxString& str) { - m_value = (wxAtol((const wxChar*) str) != 0); + m_value = (wxAtol(str) != 0); return true; } @@ -642,10 +643,10 @@ class WXDLLIMPEXP_BASE wxVariantDataChar: public wxVariantData DECLARE_DYNAMIC_CLASS(wxVariantDataChar) public: wxVariantDataChar() { m_value = 0; } - wxVariantDataChar(wxChar value) { m_value = value; } + wxVariantDataChar(const wxUniChar& value) { m_value = value; } - inline wxChar GetValue() const { return m_value; } - inline void SetValue(wxChar value) { m_value = value; } + inline wxUniChar GetValue() const { return m_value; } + inline void SetValue(const wxUniChar& value) { m_value = value; } virtual bool Eq(wxVariantData& data) const; #if wxUSE_STD_IOSTREAM @@ -658,10 +659,10 @@ public: virtual bool Read(wxInputStream& str); virtual bool Write(wxOutputStream& str) const; #endif // wxUSE_STREAMS - virtual wxString GetType() const { return wxT("char"); }; + virtual wxString GetType() const { return wxT("char"); } protected: - wxChar m_value; + wxUniChar m_value; }; IMPLEMENT_DYNAMIC_CLASS(wxVariantDataChar, wxVariantData) @@ -678,16 +679,14 @@ bool wxVariantDataChar::Eq(wxVariantData& data) const #if wxUSE_STD_IOSTREAM bool wxVariantDataChar::Write(wxSTD ostream& str) const { - wxString s; - Write(s); - str << (const char*) s.mb_str(); + str << wxString(m_value); return true; } #endif bool wxVariantDataChar::Write(wxString& str) const { - str.Printf(wxT("%c"), m_value); + str = m_value; return true; } @@ -705,7 +704,9 @@ bool wxVariantDataChar::Write(wxOutputStream& str) const { wxTextOutputStream s(str); - s << m_value; + // FIXME-UTF8: this should be just "s << m_value;" after removal of + // ANSI build and addition of wxUniChar to wxTextOutputStream: + s << (wxChar)m_value; return true; } @@ -714,7 +715,11 @@ bool wxVariantDataChar::Read(wxInputStream& str) { wxTextInputStream s(str); - s >> m_value; + // FIXME-UTF8: this should be just "s >> m_value;" after removal of + // ANSI build and addition of wxUniChar to wxTextInputStream: + wxChar ch; + s >> ch; + m_value = ch; return true; } @@ -722,31 +727,38 @@ bool wxVariantDataChar::Read(wxInputStream& str) bool wxVariantDataChar::Read(wxString& str) { - m_value = str[size_t(0)]; + m_value = str[0u]; return true; } -wxVariant::wxVariant(wxChar val, const wxString& name) +wxVariant::wxVariant(const wxUniChar& val, const wxString& name) { m_data = new wxVariantDataChar(val); m_name = name; } -bool wxVariant::operator== (wxChar value) const +wxVariant::wxVariant(char val, const wxString& name) { - wxChar thisValue; + m_data = new wxVariantDataChar(val); + m_name = name; +} + +wxVariant::wxVariant(wchar_t val, const wxString& name) +{ + m_data = new wxVariantDataChar(val); + m_name = name; +} + +bool wxVariant::operator==(const wxUniChar& value) const +{ + wxUniChar thisValue; if (!Convert(&thisValue)) return false; else return (value == thisValue); } -bool wxVariant::operator!= (wxChar value) const -{ - return (!((*this) == value)); -} - -void wxVariant::operator= (wxChar value) +wxVariant& wxVariant::operator=(const wxUniChar& value) { if (GetType() == wxT("char") && m_data->GetRefCount() == 1) @@ -758,17 +770,19 @@ void wxVariant::operator= (wxChar value) UnRef(); m_data = new wxVariantDataChar(value); } + + return *this; } -wxChar wxVariant::GetChar() const +wxUniChar wxVariant::GetChar() const { - wxChar value; + wxUniChar value; if (Convert(& value)) return value; else { wxFAIL_MSG(wxT("Could not convert to a char")); - return 0; + return wxUniChar(0); } } @@ -793,13 +807,13 @@ public: virtual bool Read(wxString& str); virtual bool Write(wxString& str) const; #if wxUSE_STD_IOSTREAM - virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; }; + virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; } #endif #if wxUSE_STREAMS virtual bool Read(wxInputStream& str); virtual bool Write(wxOutputStream& str) const; #endif // wxUSE_STREAMS - virtual wxString GetType() const { return wxT("string"); }; + virtual wxString GetType() const { return wxT("string"); } protected: wxString m_value; @@ -862,7 +876,31 @@ wxVariant::wxVariant(const wxString& val, const wxString& name) m_name = name; } -wxVariant::wxVariant(const wxChar* val, const wxString& name) +wxVariant::wxVariant(const char* val, const wxString& name) +{ + m_data = new wxVariantDataString(wxString(val)); + m_name = name; +} + +wxVariant::wxVariant(const wchar_t* val, const wxString& name) +{ + m_data = new wxVariantDataString(wxString(val)); + m_name = name; +} + +wxVariant::wxVariant(const wxCStrData& val, const wxString& name) +{ + m_data = new wxVariantDataString(val.AsString()); + m_name = name; +} + +wxVariant::wxVariant(const wxCharBuffer& val, const wxString& name) +{ + m_data = new wxVariantDataString(wxString(val)); + m_name = name; +} + +wxVariant::wxVariant(const wxWCharBuffer& val, const wxString& name) { m_data = new wxVariantDataString(wxString(val)); m_name = name; @@ -882,7 +920,7 @@ bool wxVariant::operator!= (const wxString& value) const return (!((*this) == value)); } -void wxVariant::operator= (const wxString& value) +wxVariant& wxVariant::operator= (const wxString& value) { if (GetType() == wxT("string") && m_data->GetRefCount() == 1) @@ -894,20 +932,7 @@ void wxVariant::operator= (const wxString& value) UnRef(); m_data = new wxVariantDataString(value); } -} - -void wxVariant::operator= (const wxChar* value) -{ - if (GetType() == wxT("string") && - m_data->GetRefCount() == 1) - { - ((wxVariantDataString*)GetData())->SetValue(wxString(value)); - } - else - { - UnRef(); - m_data = new wxVariantDataString(wxString(value)); - } + return *this; } wxString wxVariant::GetString() const @@ -1066,7 +1091,7 @@ public: virtual bool Read(wxSTD istream& str); #endif virtual bool Read(wxString& str); - virtual wxString GetType() const { return wxT("void*"); }; + virtual wxString GetType() const { return wxT("void*"); } virtual wxVariantData* Clone() { return new wxVariantDataVoidPtr; } protected: @@ -1190,7 +1215,7 @@ public: virtual bool Read(wxSTD istream& str); #endif virtual bool Read(wxString& str); - virtual wxString GetType() const { return wxT("datetime"); }; + virtual wxString GetType() const { return wxT("datetime"); } virtual wxVariantData* Clone() { return new wxVariantDataDateTime; } protected: @@ -1239,7 +1264,7 @@ bool wxVariantDataDateTime::Read(wxSTD istream& WXUNUSED(str)) bool wxVariantDataDateTime::Read(wxString& str) { - if(! m_value.ParseDateTime(str)) + if(! m_value.ParseDateTime(str.c_str()/*FIXME-UTF8*/)) return false; return true; } @@ -1356,7 +1381,7 @@ public: virtual bool Read(wxSTD istream& str); #endif virtual bool Read(wxString& str); - virtual wxString GetType() const { return wxT("arrstring"); }; + virtual wxString GetType() const { return wxT("arrstring"); } virtual wxVariantData* Clone() { return new wxVariantDataArrayString; } protected: @@ -1485,7 +1510,7 @@ public: virtual bool Read(wxSTD istream& str); #endif virtual bool Read(wxString& str); - virtual wxString GetType() const { return wxT("list"); }; + virtual wxString GetType() const { return wxT("list"); } void Clear(); @@ -1757,7 +1782,7 @@ bool wxVariant::Convert(long* value) const *value = (long) (((wxVariantDataBool*)GetData())->GetValue()); #endif else if (type == wxT("string")) - *value = wxAtol((const wxChar*) ((wxVariantDataString*)GetData())->GetValue()); + *value = wxAtol(((wxVariantDataString*)GetData())->GetValue()); else return false; @@ -1804,14 +1829,14 @@ bool wxVariant::Convert(double* value) const *value = (double) (((wxVariantDataBool*)GetData())->GetValue()); #endif else if (type == wxT("string")) - *value = (double) wxAtof((const wxChar*) ((wxVariantDataString*)GetData())->GetValue()); + *value = (double) wxAtof(((wxVariantDataString*)GetData())->GetValue()); else return false; return true; } -bool wxVariant::Convert(wxChar* value) const +bool wxVariant::Convert(wxUniChar* value) const { wxString type(GetType()); if (type == wxT("char")) @@ -1828,6 +1853,24 @@ bool wxVariant::Convert(wxChar* value) const return true; } +bool wxVariant::Convert(char* value) const +{ + wxUniChar ch; + if ( !Convert(&ch) ) + return false; + *value = ch; + return true; +} + +bool wxVariant::Convert(wchar_t* value) const +{ + wxUniChar ch; + if ( !Convert(&ch) ) + return false; + *value = ch; + return true; +} + bool wxVariant::Convert(wxString* value) const { *value = MakeString(); @@ -1846,7 +1889,9 @@ bool wxVariant::Convert(wxDateTime* value) const // Fallback to string conversion wxString val; return Convert(&val) && - (value->ParseDateTime(val) || value->ParseDate(val) || value->ParseTime(val)); + (value->ParseDateTime(val.c_str()/*FIXME-UTF8*/) || + value->ParseDate(val.c_str()/*FIXME-UTF8*/) || + value->ParseTime(val.c_str()/*FIXME-UTF8*/)); } #endif // wxUSE_DATETIME