]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/variant.h
Some wxComboCtrlBase member functions were enclosed within incorrect compatibility...
[wxWidgets.git] / include / wx / variant.h
index 31fbbc8acb01c3ab01678dc8f3d05673b96a6688..b1b18da47f73821e05adb493db3c3ca898eecf28 100644 (file)
 #include "wx/arrstr.h"
 #include "wx/list.h"
 #include "wx/cpp.h"
+#include "wx/longlong.h"
 
 #if wxUSE_DATETIME
     #include "wx/datetime.h"
 #endif // wxUSE_DATETIME
 
-#if wxUSE_ODBC
-    #include "wx/db.h"  // will #include sqltypes.h
-#endif //ODBC
-
 #include "wx/iosfwrap.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
  * overloading wxVariant with unnecessary functionality.
  */
 
-class WXDLLIMPEXP_BASE wxVariantData
+class WXDLLIMPEXP_BASE wxVariantData : public wxObjectRefData
 {
     friend class wxVariant;
 public:
-    wxVariantData() : m_count(1) { }
+    wxVariantData() { }
 
     // Override these to provide common functionality
     virtual bool Eq(wxVariantData& data) const = 0;
@@ -81,27 +74,15 @@ 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; }
 
-    void IncRef() { m_count++; }
-    void DecRef()
-    {
-        if ( --m_count == 0 )
-            delete this;
-    }
-
-    int GetRefCount() const { return m_count; }
-
 protected:
     // Protected dtor should make some incompatible code
     // break more louder. That is, they should do data->DecRef()
     // instead of delete data.
     virtual ~wxVariantData() { }
-
-private:
-    int     m_count;
 };
 
 /*
@@ -141,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();
@@ -190,31 +171,19 @@ public:
     long GetLong() const;
 
     // bool
-#ifdef HAVE_BOOL
     wxVariant(bool val, const wxString& name = wxEmptyString);
     bool operator== (bool value) const;
     bool operator!= (bool value) const;
     void operator= (bool value) ;
     inline operator bool () const {  return GetBool(); }
     bool GetBool() const ;
-#endif
 
     // wxDateTime
 #if wxUSE_DATETIME
     wxVariant(const wxDateTime& val, const wxString& name = wxEmptyString);
-#if wxUSE_ODBC
-    wxVariant(const DATE_STRUCT* valptr, const wxString& name = wxEmptyString);
-    wxVariant(const TIME_STRUCT* valptr, const wxString& name = wxEmptyString);
-    wxVariant(const TIMESTAMP_STRUCT* valptr, const wxString& name = wxEmptyString);
-#endif
     bool operator== (const wxDateTime& value) const;
     bool operator!= (const wxDateTime& value) const;
     void operator= (const wxDateTime& value) ;
-#if wxUSE_ODBC
-    void operator= (const DATE_STRUCT* value) ;
-    void operator= (const TIME_STRUCT* value) ;
-    void operator= (const TIMESTAMP_STRUCT* value) ;
-#endif
     inline operator wxDateTime () const { return GetDateTime(); }
     wxDateTime GetDateTime() const;
 #endif
@@ -226,8 +195,8 @@ public:
     wxVariant(const char* val, const wxString& name = wxEmptyString);
     wxVariant(const wchar_t* val, const wxString& name = wxEmptyString);
     wxVariant(const wxCStrData& val, const wxString& name = wxEmptyString);
-    wxVariant(const wxCharBuffer& val, const wxString& name = wxEmptyString);
-    wxVariant(const wxWCharBuffer& val, const wxString& name = wxEmptyString);
+    wxVariant(const wxScopedCharBuffer& val, const wxString& name = wxEmptyString);
+    wxVariant(const wxScopedWCharBuffer& val, const wxString& name = wxEmptyString);
 
     bool operator== (const wxString& value) const;
     bool operator!= (const wxString& value) const;
@@ -241,7 +210,7 @@ public:
     wxVariant& operator=(const wxCStrData& value)
         { return *this = value.AsString(); }
     template<typename T>
-    wxVariant& operator=(const wxCharTypeBuffer<T>& value)
+    wxVariant& operator=(const wxScopedCharTypeBuffer<T>& value)
         { return *this = value.data(); }
 
     inline operator wxString () const {  return MakeString(); }
@@ -292,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
@@ -339,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: