// class is not documented and is not public at all
// ----------------------------------------------------------------------------
-class WXDLLIMPEXP_ADV wxGridCellWorker : public wxClientDataContainer
+class WXDLLIMPEXP_ADV wxGridCellWorker : public wxClientDataContainer, public wxObjectRefData
{
public:
- wxGridCellWorker() { m_nRef = 1; }
-
- // this class is ref counted: it is created with ref count of 1, so
- // calling DecRef() once will delete it. Calling IncRef() allows to lock
- // it until the matching DecRef() is called
- void IncRef() { m_nRef++; }
- void DecRef() { if ( --m_nRef == 0 ) delete this; }
+ wxGridCellWorker() { }
// interpret renderer parameters: arbitrary string whose interpretatin is
// left to the derived classes
virtual ~wxGridCellWorker();
private:
- size_t m_nRef;
-
// suppress the stupid gcc warning about the class having private dtor and
// no friends
friend class wxGridCellWorkerDummyFriend;
// class may be returned by wxGridTable::GetAttr().
// ----------------------------------------------------------------------------
-class WXDLLIMPEXP_ADV wxGridCellAttr : public wxClientDataContainer
+class WXDLLIMPEXP_ADV wxGridCellAttr : public wxClientDataContainer, public wxObjectRefData
{
public:
enum wxAttrKind
wxGridCellAttr *Clone() const;
void MergeWith(wxGridCellAttr *mergefrom);
- // this class is ref counted: it is created with ref count of 1, so
- // calling DecRef() once will delete it. Calling IncRef() allows to lock
- // it until the matching DecRef() is called
- void IncRef() { m_nRef++; }
- void DecRef() { if ( --m_nRef == 0 ) delete this; }
-
// setters
void SetTextColour(const wxColour& colText) { m_colText = colText; }
void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; }
void Init(wxGridCellAttr *attrDefault = NULL);
- // the ref count - when it goes to 0, we die
- size_t m_nRef;
-
wxColour m_colText,
m_colBack;
wxFont m_font;
friend class WXDLLIMPEXP_FWD_BASE wxObject;
public:
- wxObjectRefData() : m_count(1) { }
+ wxObjectRefData(int refCount = 1) : m_count(refCount) { }
int GetRefCount() const { return m_count; }
Base class for wxPropertyGrid cell renderers.
*/
-class WXDLLIMPEXP_PROPGRID wxPGCellRenderer
+class WXDLLIMPEXP_PROPGRID wxPGCellRenderer : public wxObjectRefData
{
public:
- wxPGCellRenderer( unsigned int refCount = 1 )
- : m_refCount(refCount) { }
+ wxPGCellRenderer( int refCount = 1 )
+ : wxObjectRefData(refCount) { }
virtual ~wxPGCellRenderer() { }
// Render flags
const wxRect& rect,
const wxPGCell& cell,
int flags ) const;
-
- void IncRef()
- {
- m_refCount++;
- }
-
- void DecRef()
- {
- m_refCount--;
- if ( !m_refCount )
- delete this;
- }
-protected:
-
-private:
- unsigned int m_refCount;
};
typedef void* wxPGChoicesId;
-class WXDLLIMPEXP_PROPGRID wxPGChoicesData
+class WXDLLIMPEXP_PROPGRID wxPGChoicesData : public wxObjectRefData
{
friend class wxPGChoices;
public:
return m_items[i];
}
- void DecRef()
- {
- m_refCount--;
- wxASSERT( m_refCount >= 0 );
- if ( m_refCount == 0 )
- delete this;
- }
-
private:
wxVector<wxPGChoiceEntry> m_items;
- // So that multiple properties can use the same set
- int m_refCount;
-
virtual ~wxPGChoicesData();
};
if ( a.m_data != wxPGChoicesEmptyData )
{
m_data = a.m_data;
- m_data->m_refCount++;
+ m_data->IncRef();
}
}
{
wxASSERT(data);
m_data = data;
- data->m_refCount++;
+ data->IncRef();
}
/** Destructor. */
// Returns data, increases refcount.
wxPGChoicesData* GetData()
{
- wxASSERT( m_data->m_refCount != 0xFFFFFFF );
- m_data->m_refCount++;
+ wxASSERT( m_data->GetRefCount() != -1 );
+ m_data->IncRef();
return m_data;
}
/** Base class to derive new viterators.
*/
-class WXDLLIMPEXP_PROPGRID wxPGVIteratorBase
+class WXDLLIMPEXP_PROPGRID wxPGVIteratorBase : public wxObjectRefData
{
friend class wxPGVIterator;
public:
- wxPGVIteratorBase() { m_refCount = 1; }
+ wxPGVIteratorBase() { }
virtual void Next() = 0;
- void IncRef()
- {
- m_refCount++;
- }
- void DecRef()
- {
- m_refCount--;
- if ( m_refCount <= 0 )
- delete this;
- }
protected:
virtual ~wxPGVIteratorBase() { }
wxPropertyGridIterator m_it;
-private:
- int m_refCount;
};
/** @class wxPGVIterator
* 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;
// 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;
};
/*
if ( clone.m_data )
{
m_data = clone.m_data;
- m_data->m_count++;
+ m_data->IncRef();
}
}
{
if ( m_data )
{
- wxASSERT_MSG( m_data->m_count > 0, _T("invalid ref data count") );
+ wxASSERT_MSG( m_data->GetRefCount() > 0, _T("invalid ref data count") );
m_data->DecRef();
m_data = NULL;
void wxGridCellAttr::Init(wxGridCellAttr *attrDefault)
{
- m_nRef = 1;
-
m_isReadOnly = Unset;
m_renderer = NULL;
{
AllocExclusive();
- wxASSERT( m_data->m_refCount != 0xFFFFFFF );
+ wxASSERT( m_data->GetRefCount() != -1 );
m_data->m_items.erase(m_data->m_items.begin()+nIndex,
m_data->m_items.begin()+nIndex+count);
}
{
EnsureData();
- if ( m_data->m_refCount != 1 )
+ if ( m_data->GetRefCount() != 1 )
{
wxPGChoicesData* data = new wxPGChoicesData();
data->CopyDataFrom(m_data);
if ( data != wxPGChoicesEmptyData )
{
m_data = data;
- data->m_refCount++;
+ data->IncRef();
}
}
wxPGChoicesData::wxPGChoicesData()
{
- m_refCount = 1;
}
wxPGChoicesData::~wxPGChoicesData()