include/variantutils/variantref.h

Go to the documentation of this file.
00001 
00002 // Name:        variantref.h
00003 // Purpose:     Base classes for reference-counted variant types
00004 // Author:      Julian Smart
00005 // Modified by:
00006 // Created:     2006-05-11
00007 // RCS-ID:      $$
00008 // Copyright:   (c) Julian Smart
00009 // Licence:     New BSD License
00011 
00012 #ifndef _WX_VARIANTREF_H_
00013 #define _WX_VARIANTREF_H_
00014 
00015 #include "wx/defs.h"
00016 #include "wx/variant.h"
00017 
00018 /*
00019  * wxVariantRefData is a wxVariantData object that is ref counted (holds and shares
00020  * the actual data). It doesn't get set directly into a wxVariant, but is stored
00021  * by a wxRefCountingVariantData object.
00022  *
00023  * We're not using the wxObject ref counting mechanism because we wish to
00024  * use RTTI in out referenced data, rather than deriving from wxObjectRefData.
00025  * Or could we derive from both? Possibly.
00026 
00027  */
00028 
00029 class wxVariantRefData: public wxVariantData
00030 {
00031 DECLARE_CLASS(wxVariantRefData)
00032 public:
00033 
00034 // Construction & destruction
00035 
00036     wxVariantRefData():m_count(1) { }
00037 
00038     virtual void Copy(wxVariantData& data) = 0;
00039 
00040 // NEW OPERATIONS
00041 
00042     int GetCount() const { return m_count; }
00043     void Inc() { m_count ++; }
00044     void Dec() { m_count --; }
00045 
00046 private:
00047 
00048     int             m_count;
00049 };
00050 
00051 /*
00052  * wxRefCountingVariantData is a wxVariantData object that can do ref counting (points to a wxVariantRefData)
00053  */
00054 
00055 class wxRefCountingVariantData: public wxVariantData
00056 {
00057 DECLARE_CLASS(wxRefCountingVariantData)
00058 public:
00059 
00060 // Construction & destruction
00061 
00062     wxRefCountingVariantData(wxVariantRefData* data) { m_variantRefData = data; }
00063     wxRefCountingVariantData() { m_variantRefData = NULL; }
00064     ~wxRefCountingVariantData() { Unref(); }
00065 
00066 // OVERRIDEABLES
00067 
00069     virtual void Copy(wxVariantData& data);
00070     virtual bool Eq(wxVariantData& data) const;
00071     virtual bool Write(wxString& str) const;
00072     virtual bool Read(wxString& str);
00073 
00074     // What type is it? Return a string name.
00075     virtual wxString GetType() const { return m_variantRefData ? m_variantRefData->GetType() : wxString(wxT("null")); }
00076 
00077 // NEW OPERATIONS
00078 
00079     void Ref(const wxRefCountingVariantData& data);
00080     void Unref();
00081     virtual wxVariantRefData* CreateVariantRefData() = 0;
00082     wxVariantRefData* CloneVariantRefData(const wxVariantRefData* refData);
00083 
00085     void AllocExclusive();
00086 
00087     wxVariantRefData* GetVariantRefData() const { return m_variantRefData; }
00088 
00089 
00090 private:
00091 
00092     wxVariantRefData*   m_variantRefData;
00093 };
00094 
00100 class wxClonableVariantData: public wxVariantData
00101 {
00102 DECLARE_CLASS(wxClonableVariantData)
00103 public:
00104 
00105 // Construction & destruction
00106 
00107     wxClonableVariantData() {}
00108 
00109     virtual wxVariantData* Clone() = 0;
00110 };
00111 
00112 // wxWidgets is missing AllocExclusive for wxVariant
00113 void wxVariantAllocExclusive(wxVariant& variant);
00114 
00115 #endif
00116     // _WX_VARIANTREF_H_

Generated on Wed May 6 19:20:19 2009 for AxTk by  doxygen 1.5.1