X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/654056ee40c6c7b4f78075b20d10f5142e45611a..cbc9145c04bd3ea0a228906c8363fa8f47e3acf9:/src/common/variant.cpp?ds=inline diff --git a/src/common/variant.cpp b/src/common/variant.cpp index 2c540d3f3c..b17b2c1f66 100644 --- a/src/common/variant.cpp +++ b/src/common/variant.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: variant.cpp +// Name: src/common/variant.cpp // Purpose: wxVariant class, container for any type // Author: Julian Smart // Modified by: @@ -16,6 +16,18 @@ #pragma hdrstop #endif +#include "wx/variant.h" + +#if wxUSE_VARIANT + +#ifndef WX_PRECOMP + #include "wx/string.h" + #include "wx/math.h" + #if wxUSE_STREAMS + #include "wx/stream.h" + #endif +#endif + #if wxUSE_STD_IOSTREAM #if wxUSE_IOSTREAMH #include @@ -30,15 +42,11 @@ using namespace std ; #endif #if wxUSE_STREAMS -#include "wx/stream.h" -#include "wx/txtstrm.h" + #include "wx/txtstrm.h" #endif #include "wx/string.h" #include "wx/tokenzr.h" -#include "wx/math.h" - -#include "wx/variant.h" IMPLEMENT_ABSTRACT_CLASS(wxVariantData, wxObject) @@ -54,7 +62,7 @@ DECLARE_DYNAMIC_CLASS(wxVariantDataList) public: wxVariantDataList() {} wxVariantDataList(const wxList& list); - ~wxVariantDataList(); + virtual ~wxVariantDataList(); wxList& GetValue() { return m_value; } void SetValue(const wxList& value) ; @@ -732,7 +740,7 @@ public: virtual bool Read(wxString& str); virtual bool Write(wxString& str) const; #if wxUSE_STD_IOSTREAM - virtual bool Read(wxSTD istream& str); + virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; }; #endif #if wxUSE_STREAMS virtual bool Read(wxInputStream& str); @@ -776,14 +784,6 @@ bool wxVariantDataString::Write(wxString& str) const return true; } -#if wxUSE_STD_IOSTREAM -bool wxVariantDataString::Read(wxSTD istream& str) -{ - str >> m_value; - return true; -} -#endif - #if wxUSE_STREAMS bool wxVariantDataString::Write(wxOutputStream& str) const { @@ -797,7 +797,7 @@ bool wxVariantDataString::Read(wxInputStream& str) { wxTextInputStream s(str); - m_value = s.ReadString(); + m_value = s.ReadLine(); return true; } #endif // wxUSE_STREAMS @@ -979,7 +979,7 @@ bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const bool wxVariantDataWxObjectPtr::Write(wxString& str) const { - str.Printf(wxT("%s(%p)"), GetType().c_str(), m_value); + str.Printf(wxT("%s(%p)"), GetType().c_str(), wx_static_cast(void*, m_value)); return true; } @@ -1628,6 +1628,23 @@ void wxVariant::operator= (void* value) } } +bool wxVariant::operator== (wxObject* value) const +{ + return (value == ((wxVariantDataWxObjectPtr*)GetData())->GetValue()); +} + +bool wxVariant::operator!= (wxObject* value) const +{ + return (!((*this) == (void*) value)); +} + +void wxVariant::operator= (wxObject* value) +{ + if (m_data) + delete m_data; + m_data = new wxVariantDataWxObjectPtr(value); +} + #if wxUSE_DATETIME bool wxVariant::operator== (const wxDateTime& value) const { @@ -1730,14 +1747,14 @@ wxVariant wxVariant::operator[] (size_t idx) const if (GetType() == wxT("list")) { wxVariantDataList* data = (wxVariantDataList*) m_data; - wxASSERT_MSG( (idx < (size_t) data->GetValue().GetCount()), wxT("Invalid index for array") ); + wxASSERT_MSG( (idx < data->GetValue().GetCount()), wxT("Invalid index for array") ); return * (wxVariant*) (data->GetValue().Item(idx)->GetData()); } #if WXWIN_COMPATIBILITY_2_4 else if (GetType() == wxT("stringlist")) { wxVariantDataStringList* data = (wxVariantDataStringList*) m_data; - wxASSERT_MSG( (idx < (size_t) data->GetValue().GetCount()), wxT("Invalid index for array") ); + wxASSERT_MSG( (idx < data->GetValue().GetCount()), wxT("Invalid index for array") ); wxString str( (const wxChar*) (data->GetValue().Item(idx)->GetData()) ); wxVariant variant( str ); @@ -1755,13 +1772,13 @@ wxVariant& wxVariant::operator[] (size_t idx) wxASSERT_MSG( (GetType() == wxT("list")), wxT("Invalid type for array operator") ); wxVariantDataList* data = (wxVariantDataList*) m_data; - wxASSERT_MSG( (idx < (size_t) data->GetValue().GetCount()), wxT("Invalid index for array") ); + wxASSERT_MSG( (idx < data->GetValue().GetCount()), wxT("Invalid index for array") ); return * (wxVariant*) (data->GetValue().Item(idx)->GetData()); } // Return the number of elements in a list -int wxVariant::GetCount() const +size_t wxVariant::GetCount() const { #if WXWIN_COMPATIBILITY_2_4 wxASSERT_MSG( (GetType() == wxT("list") || GetType() == wxT("stringlist")), wxT("Invalid type for GetCount()") ); @@ -1894,7 +1911,7 @@ void* wxVariant::GetVoidPtr() const return (void*) ((wxVariantDataVoidPtr*) m_data)->GetValue(); } -wxObject* wxVariant::GetWxObjectPtr() +wxObject* wxVariant::GetWxObjectPtr() const { wxASSERT(wxIsKindOf(m_data, wxVariantDataWxObjectPtr)); return (wxObject*) ((wxVariantDataWxObjectPtr*) m_data)->GetValue(); @@ -1970,11 +1987,11 @@ bool wxVariant::Member(const wxVariant& value) const } // Deletes the nth element of the list -bool wxVariant::Delete(int item) +bool wxVariant::Delete(size_t item) { wxList& list = GetList(); - wxASSERT_MSG( (item < (int) list.GetCount()), wxT("Invalid index to Delete") ); + wxASSERT_MSG( (item < list.GetCount()), wxT("Invalid index to Delete") ); wxList::compatibility_iterator node = list.Item(item); wxVariant* variant = (wxVariant*) node->GetData(); delete variant; @@ -2102,7 +2119,8 @@ bool wxVariant::Convert(wxDateTime* value) const // Fallback to string conversion wxString val; return Convert(&val) && - (value->ParseDateTime(val) || value->ParseDate(val)); + (value->ParseDateTime(val) || value->ParseDate(val) || value->ParseTime(val)); } #endif // wxUSE_DATETIME +#endif // wxUSE_VARIANT