]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/variant.h
Resolve GCC's 'type-punned pointer will break strict-aliasing rules' warning by break...
[wxWidgets.git] / include / wx / variant.h
index ded99175d47224ecbb903e651212d298d8e3668c..b1b18da47f73821e05adb493db3c3ca898eecf28 100644 (file)
@@ -21,6 +21,7 @@
 #include "wx/arrstr.h"
 #include "wx/list.h"
 #include "wx/cpp.h"
+#include "wx/longlong.h"
 
 #if wxUSE_DATETIME
     #include "wx/datetime.h"
  * to allow it to store any type of data.
  * Derive from this to provide custom data handling.
  *
- * NB: To prevent addition of extra vtbl pointer to wxVariantData,
- *     we don't multiple-inherit from wxObjectRefData. Instead,
- *     we simply replicate the wxObject ref-counting scheme.
- *
  * NB: When you construct a wxVariantData, it will have refcount
  *     of one. Refcount will not be further increased when
  *     it is passed to wxVariant. This simulates old common
@@ -55,7 +52,7 @@
  * overloading wxVariant with unnecessary functionality.
  */
 
-class WXDLLIMPEXP_BASE wxVariantData : public wxRefCounter
+class WXDLLIMPEXP_BASE wxVariantData : public wxObjectRefData
 {
     friend class wxVariant;
 public:
@@ -77,7 +74,7 @@ public:
     // If it based on wxObject return the ClassInfo.
     virtual wxClassInfo* GetValueClassInfo() { return NULL; }
 
-    // Implement this to make wxVariant::AllocExcusive work. Returns
+    // Implement this to make wxVariant::UnShare work. Returns
     // a copy of the data.
     virtual wxVariantData* Clone() const { return NULL; }
 
@@ -125,14 +122,14 @@ public:
 
     // For compatibility with wxWidgets <= 2.6, this doesn't increase
     // reference count.
-    wxVariantData* GetData() const { return m_data; }
+    wxVariantData* GetData() const
+    {
+        return (wxVariantData*) m_refData;
+    }
     void SetData(wxVariantData* data) ;
 
     // make a 'clone' of the object
-    void Ref(const wxVariant& clone);
-
-    // destroy a reference
-    void UnRef();
+    void Ref(const wxVariant& clone) { wxObject::Ref(clone); }
 
     // ensure that the data is exclusive to this variant, and not shared
     bool Unshare();
@@ -264,6 +261,23 @@ public:
     void operator= (wxObject* value);
     wxObject* GetWxObjectPtr() const;
 
+#if wxUSE_LONGLONG
+    // wxLongLong
+    wxVariant(wxLongLong, const wxString& name = wxEmptyString);
+    bool operator==(wxLongLong value) const;
+    bool operator!=(wxLongLong value) const;
+    void operator=(wxLongLong value);
+    operator wxLongLong() const { return GetLongLong(); }
+    wxLongLong GetLongLong() const;
+
+    // wxULongLong
+    wxVariant(wxULongLong, const wxString& name = wxEmptyString);
+    bool operator==(wxULongLong value) const;
+    bool operator!=(wxULongLong value) const;
+    void operator=(wxULongLong value);
+    operator wxULongLong() const { return GetULongLong(); }
+    wxULongLong GetULongLong() const;
+#endif
 
     // ------------------------------
     // list operations
@@ -311,10 +325,16 @@ public:
 #if wxUSE_DATETIME
     bool Convert(wxDateTime* value) const;
 #endif // wxUSE_DATETIME
+#if wxUSE_LONGLONG
+    bool Convert(wxLongLong* value) const;
+    bool Convert(wxULongLong* value) const;
+#endif // wxUSE_LONGLONG
 
 // Attributes
 protected:
-    wxVariantData*  m_data;
+    virtual wxObjectRefData *CreateRefData() const;
+    virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
+
     wxString        m_name;
 
 private: