Removed dst buffer delete responsibility from wxAnyValueType::CopyBuffer(), clarified documentation regarding it.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62198 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -83,9 +83,14 @@ public:
|
|||||||
virtual void DeleteValue(wxAnyValueBuffer& buf) const = 0;
|
virtual void DeleteValue(wxAnyValueBuffer& buf) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Implement this for buffer-to-buffer copy. src.m_ptr can
|
Implement this for buffer-to-buffer copy.
|
||||||
be expected to be NULL if value type of previously stored
|
|
||||||
data was different.
|
@param src
|
||||||
|
This is the source data buffer.
|
||||||
|
|
||||||
|
@param dst
|
||||||
|
This is the destination data buffer that is in either
|
||||||
|
uninitialized or freed state.
|
||||||
*/
|
*/
|
||||||
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
||||||
wxAnyValueBuffer& dst) const = 0;
|
wxAnyValueBuffer& dst) const = 0;
|
||||||
@@ -259,13 +264,11 @@ public:
|
|||||||
virtual void DeleteValue(wxAnyValueBuffer& buf) const
|
virtual void DeleteValue(wxAnyValueBuffer& buf) const
|
||||||
{
|
{
|
||||||
Ops::DeleteValue(buf);
|
Ops::DeleteValue(buf);
|
||||||
buf.m_ptr = NULL; // This is important
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
||||||
wxAnyValueBuffer& dst) const
|
wxAnyValueBuffer& dst) const
|
||||||
{
|
{
|
||||||
Ops::DeleteValue(dst);
|
|
||||||
Ops::SetValue(Ops::GetValue(src), dst);
|
Ops::SetValue(Ops::GetValue(src), dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -767,12 +770,15 @@ private:
|
|||||||
// Assignment functions
|
// Assignment functions
|
||||||
void AssignAny(const wxAny& any)
|
void AssignAny(const wxAny& any)
|
||||||
{
|
{
|
||||||
if ( !any.m_type->IsSameType(m_type) )
|
// Must delete value - CopyBuffer() never does that
|
||||||
{
|
|
||||||
m_type->DeleteValue(m_buffer);
|
m_type->DeleteValue(m_buffer);
|
||||||
m_type = any.m_type;
|
|
||||||
}
|
wxAnyValueType* newType = any.m_type;
|
||||||
m_type->CopyBuffer(any.m_buffer, m_buffer);
|
|
||||||
|
if ( !newType->IsSameType(m_type) )
|
||||||
|
m_type = newType;
|
||||||
|
|
||||||
|
newType->CopyBuffer(any.m_buffer, m_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@@ -321,6 +321,8 @@ union wxAnyValueBuffer
|
|||||||
wxAnyValueBuffer& dst) const
|
wxAnyValueBuffer& dst) const
|
||||||
{
|
{
|
||||||
// TODO: Copy value from one buffer to another.
|
// TODO: Copy value from one buffer to another.
|
||||||
|
// dst is already uninitialized and does not
|
||||||
|
// need to be freed.
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool ConvertValue(const wxAnyValueBuffer& src,
|
virtual bool ConvertValue(const wxAnyValueBuffer& src,
|
||||||
@@ -394,9 +396,14 @@ public:
|
|||||||
wxAnyValueBuffer& dst) const = 0;
|
wxAnyValueBuffer& dst) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Implement this for buffer-to-buffer copy. src.m_ptr can
|
Implement this for buffer-to-buffer copy.
|
||||||
be expected to be NULL if value type of previously stored
|
|
||||||
data was different.
|
@param src
|
||||||
|
This is the source data buffer.
|
||||||
|
|
||||||
|
@param dst
|
||||||
|
This is the destination data buffer that is in either
|
||||||
|
uninitialized or freed state.
|
||||||
*/
|
*/
|
||||||
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
||||||
wxAnyValueBuffer& dst) const = 0;
|
wxAnyValueBuffer& dst) const = 0;
|
||||||
|
@@ -354,12 +354,12 @@ class wxAnyValueTypeImpl<wxAnyNullValue> : public wxAnyValueType
|
|||||||
{
|
{
|
||||||
WX_DECLARE_ANY_VALUE_TYPE(wxAnyValueTypeImpl<wxAnyNullValue>)
|
WX_DECLARE_ANY_VALUE_TYPE(wxAnyValueTypeImpl<wxAnyNullValue>)
|
||||||
public:
|
public:
|
||||||
|
// Dummy implementations
|
||||||
virtual void DeleteValue(wxAnyValueBuffer& buf) const
|
virtual void DeleteValue(wxAnyValueBuffer& buf) const
|
||||||
{
|
{
|
||||||
buf.m_ptr = NULL; // This is important
|
wxUnusedVar(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dummy implementations
|
|
||||||
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
virtual void CopyBuffer(const wxAnyValueBuffer& src,
|
||||||
wxAnyValueBuffer& dst) const
|
wxAnyValueBuffer& dst) const
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user