From fed2573566c2da1c5489260069a99ae9d2abf255 Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Wed, 28 Oct 2009 18:08:33 +0100 Subject: Unlink previous node in SetParent(). --- include/plist/Structure.h | 2 ++ src/Node.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/plist/Structure.h b/include/plist/Structure.h index 6f100cc..239a8b8 100644 --- a/include/plist/Structure.h +++ b/include/plist/Structure.h @@ -38,6 +38,8 @@ class Structure : public Node std::string ToXml(); std::vector ToBin(); + + virtual void Remove(Node* node) = 0; protected: Structure(Node* parent = NULL); diff --git a/src/Node.cpp b/src/Node.cpp index e513862..c6a5b51 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -20,6 +20,7 @@ #include #include +#include namespace PList { @@ -96,6 +97,16 @@ Node* Node::GetParent() void Node::SetParent(Node* parent) { + //Unlink node first + if ( NULL != _parent ) + { + plist_type type = plist_get_node_type(_parent); + if (PLIST_ARRAY ==type || PLIST_DICT == type ) + { + Structure* s = static_cast(_parent); + s->Remove(this); + } + } _parent = parent; } -- cgit v1.1-32-gdbae