diff options
| -rw-r--r-- | include/plist/Node.h | 6 | ||||
| -rw-r--r-- | include/plist/Structure.h | 1 | ||||
| -rw-r--r-- | src/Array.cpp | 4 | ||||
| -rw-r--r-- | src/Dictionary.cpp | 2 | ||||
| -rw-r--r-- | src/Node.cpp | 15 | ||||
| -rw-r--r-- | src/Structure.cpp | 15 | 
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; +} +  }; | 
