summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/plist/Node.h6
-rw-r--r--include/plist/Structure.h1
-rw-r--r--src/Array.cpp4
-rw-r--r--src/Dictionary.cpp2
-rw-r--r--src/Node.cpp15
-rw-r--r--src/Structure.cpp15
6 files changed, 23 insertions, 20 deletions
diff --git a/include/plist/Node.h b/include/plist/Node.h
index 7ea6ed9..2f9f5b6 100644
--- a/include/plist/Node.h
+++ b/include/plist/Node.h
@@ -33,9 +33,8 @@ public :
virtual ~Node();
virtual Node* Clone() = 0;
- Node * GetParent();
- void SetParent(Node* parent);
+ Node * GetParent();
plist_type GetType();
plist_t GetPlist();
@@ -44,7 +43,10 @@ protected:
Node(plist_t node, Node* parent = NULL);
Node(plist_type type, Node* parent = NULL);
plist_t _node;
+
+private:
Node* _parent;
+ friend class Structure;
};
};
diff --git a/include/plist/Structure.h b/include/plist/Structure.h
index 66d9293..f6e4495 100644
--- a/include/plist/Structure.h
+++ b/include/plist/Structure.h
@@ -44,6 +44,7 @@ public :
protected:
Structure(Node* parent = NULL);
Structure(plist_type type, Node* parent = NULL);
+ void UpdateNodeParent(Node* node);
private:
Structure(Structure& s);
diff --git a/src/Array.cpp b/src/Array.cpp
index a847ae2..3069314 100644
--- a/src/Array.cpp
+++ b/src/Array.cpp
@@ -101,7 +101,7 @@ void Array::Append(Node* node)
if (node)
{
Node* clone = node->Clone();
- clone->SetParent(this);
+ UpdateNodeParent(clone);
plist_array_append_item(_node, clone->GetPlist());
_array.push_back(clone);
}
@@ -112,7 +112,7 @@ void Array::Insert(Node* node, unsigned int pos)
if (node)
{
Node* clone = node->Clone();
- clone->SetParent(this);
+ UpdateNodeParent(clone);
plist_array_insert_item(_node, clone->GetPlist(), pos);
std::vector<Node*>::iterator it = _array.begin();
it += pos;
diff --git a/src/Dictionary.cpp b/src/Dictionary.cpp
index 62ed433..8b5565f 100644
--- a/src/Dictionary.cpp
+++ b/src/Dictionary.cpp
@@ -147,7 +147,7 @@ Dictionary::iterator Dictionary::Insert(const std::string& key, Node* node)
if (node)
{
Node* clone = node->Clone();
- clone->SetParent(this);
+ UpdateNodeParent(clone);
plist_dict_insert_item(_node, key.c_str(), clone->GetPlist());
delete _map[key];
_map[key] = clone;
diff --git a/src/Node.cpp b/src/Node.cpp
index 8ed3c6a..b0cc96a 100644
--- a/src/Node.cpp
+++ b/src/Node.cpp
@@ -96,19 +96,4 @@ Node* Node::GetParent()
return _parent;
}
-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<Structure*>(_parent);
- s->Remove(this);
- }
- }
- _parent = parent;
-}
-
};
diff --git a/src/Structure.cpp b/src/Structure.cpp
index 872d396..cf7c611 100644
--- a/src/Structure.cpp
+++ b/src/Structure.cpp
@@ -70,5 +70,20 @@ std::vector<char> Structure::ToBin()
return ret;
}
+void Structure::UpdateNodeParent(Node* node)
+{
+ //Unlink node first
+ if ( NULL != node->_parent )
+ {
+ plist_type type = plist_get_node_type(node->_parent);
+ if (PLIST_ARRAY ==type || PLIST_DICT == type )
+ {
+ Structure* s = static_cast<Structure*>(node->_parent);
+ s->Remove(node);
+ }
+ }
+ node->_parent = this;
+}
+
};