X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6b2edfc836c8867cb868e73d35f36a6e68f943..a95f37bc57cd0318ee2ae5cc94ac447cce47a5cf:/src/common/variant.cpp diff --git a/src/common/variant.cpp b/src/common/variant.cpp index b71f67801d..627edfbef6 100644 --- a/src/common/variant.cpp +++ b/src/common/variant.cpp @@ -63,12 +63,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxVariant, wxObject) wxVariant::wxVariant() { - m_data = (wxVariantData*) NULL; + m_data = NULL; } bool wxVariant::IsNull() const { - return (m_data == (wxVariantData*) NULL); + return (m_data == NULL); } void wxVariant::MakeNull() @@ -84,7 +84,7 @@ void wxVariant::Clear() wxVariant::wxVariant(const wxVariant& variant) : wxObject() { - m_data = (wxVariantData*) NULL; + m_data = NULL; if (!variant.IsNull()) Ref(variant); @@ -122,6 +122,9 @@ bool wxVariant::operator== (const wxVariant& variant) const if (IsNull() || variant.IsNull()) return (IsNull() == variant.IsNull()); + if (GetType() != variant.GetType()) + return false; + return (GetData()->Eq(* variant.GetData())); } @@ -514,8 +517,6 @@ double wxVariant::GetDouble() const // wxVariantBoolData // ----------------------------------------------------------------- -#ifdef HAVE_BOOL - class WXDLLIMPEXP_BASE wxVariantDataBool: public wxVariantData { public: @@ -651,8 +652,6 @@ bool wxVariant::GetBool() const } } -#endif // HAVE_BOOL - // ----------------------------------------------------------------- // wxVariantDataChar // ----------------------------------------------------------------- @@ -1035,7 +1034,7 @@ bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const bool wxVariantDataWxObjectPtr::Write(wxString& str) const { - str.Printf(wxT("%s(%p)"), GetType().c_str(), wx_static_cast(void*, m_value)); + str.Printf(wxT("%s(%p)"), GetType().c_str(), static_cast(m_value)); return true; } @@ -1183,7 +1182,11 @@ void wxVariant::operator= (void* value) void* wxVariant::GetVoidPtr() const { - wxASSERT( (GetType() == wxT("void*")) ); + // handling this specially is convenient when working with COM, see #9873 + if ( IsNull() ) + return NULL; + + wxASSERT( GetType() == wxT("void*") ); return (void*) ((wxVariantDataVoidPtr*) m_data)->GetValue(); } @@ -1243,7 +1246,10 @@ bool wxVariantDataDateTime::Write(wxSTD ostream& str) const bool wxVariantDataDateTime::Write(wxString& str) const { - str = m_value.Format(); + if ( m_value.IsValid() ) + str = m_value.Format(); + else + str = wxS("Invalid"); return true; } @@ -1259,6 +1265,12 @@ bool wxVariantDataDateTime::Read(wxSTD istream& WXUNUSED(str)) bool wxVariantDataDateTime::Read(wxString& str) { + if ( str == wxS("Invalid") ) + { + m_value = wxInvalidDateTime; + return true; + } + if(! m_value.ParseDateTime(str.c_str()/*FIXME-UTF8*/)) return false; return true; @@ -1725,10 +1737,8 @@ bool wxVariant::Convert(long* value) const *value = (long) (((wxVariantDoubleData*)GetData())->GetValue()); else if (type == wxT("long")) *value = ((wxVariantDataLong*)GetData())->GetValue(); -#ifdef HAVE_BOOL else if (type == wxT("bool")) *value = (long) (((wxVariantDataBool*)GetData())->GetValue()); -#endif else if (type == wxT("string")) *value = wxAtol(((wxVariantDataString*)GetData())->GetValue()); else @@ -1744,10 +1754,8 @@ bool wxVariant::Convert(bool* value) const *value = ((int) (((wxVariantDoubleData*)GetData())->GetValue()) != 0); else if (type == wxT("long")) *value = (((wxVariantDataLong*)GetData())->GetValue() != 0); -#ifdef HAVE_BOOL else if (type == wxT("bool")) *value = ((wxVariantDataBool*)GetData())->GetValue(); -#endif else if (type == wxT("string")) { wxString val(((wxVariantDataString*)GetData())->GetValue()); @@ -1772,10 +1780,8 @@ bool wxVariant::Convert(double* value) const *value = ((wxVariantDoubleData*)GetData())->GetValue(); else if (type == wxT("long")) *value = (double) (((wxVariantDataLong*)GetData())->GetValue()); -#ifdef HAVE_BOOL else if (type == wxT("bool")) *value = (double) (((wxVariantDataBool*)GetData())->GetValue()); -#endif else if (type == wxT("string")) *value = (double) wxAtof(((wxVariantDataString*)GetData())->GetValue()); else @@ -1791,10 +1797,8 @@ bool wxVariant::Convert(wxUniChar* value) const *value = ((wxVariantDataChar*)GetData())->GetValue(); else if (type == wxT("long")) *value = (char) (((wxVariantDataLong*)GetData())->GetValue()); -#ifdef HAVE_BOOL else if (type == wxT("bool")) *value = (char) (((wxVariantDataBool*)GetData())->GetValue()); -#endif else return false;