summaryrefslogtreecommitdiffstats
path: root/src/Array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Array.cpp')
-rw-r--r--src/Array.cpp36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/Array.cpp b/src/Array.cpp
index 0505a27..b85a114 100644
--- a/src/Array.cpp
+++ b/src/Array.cpp
@@ -77,15 +77,9 @@ Array::Array(plist_t node) : Structure()
77 } 77 }
78} 78}
79 79
80Array::Array(Array& a) 80Array::Array(PList::Array& a) : Structure()
81{ 81{
82 plist_free(_node);
83 for (int it = 0; it < _array.size(); it++)
84 {
85 delete _array.at(it);
86 }
87 _array.clear(); 82 _array.clear();
88
89 _node = plist_copy(a.GetPlist()); 83 _node = plist_copy(a.GetPlist());
90 uint32_t size = plist_array_get_size(_node); 84 uint32_t size = plist_array_get_size(_node);
91 85
@@ -125,7 +119,7 @@ Array::Array(Array& a)
125 } 119 }
126} 120}
127 121
128Array& Array::operator=(const Array& a) 122Array& Array::operator=(PList::Array& a)
129{ 123{
130 plist_free(_node); 124 plist_free(_node);
131 for (int it = 0; it < _array.size(); it++) 125 for (int it = 0; it < _array.size(); it++)
@@ -175,12 +169,16 @@ Array& Array::operator=(const Array& a)
175 169
176Array::~Array() 170Array::~Array()
177{ 171{
178 plist_free(_node); 172 for (int it = 0; it < _array.size(); it++)
179 for (int it = 0; it < _array.size(); it++) 173 {
180 { 174 delete (_array.at(it));
181 delete _array.at(it); 175 }
182 } 176 _array.clear();
183 _array.clear(); 177}
178
179Node* Array::Clone()
180{
181 return new Array(*this);
184} 182}
185 183
186Node* Array::operator[](unsigned int index) 184Node* Array::operator[](unsigned int index)
@@ -192,8 +190,9 @@ void Array::Append(Node* node)
192{ 190{
193 if (node) 191 if (node)
194 { 192 {
195 plist_array_append_item(_node, node->GetPlist()); 193 Node* clone = node->Clone();
196 _array.push_back(node); 194 plist_array_append_item(_node, clone->GetPlist());
195 _array.push_back(clone);
197 } 196 }
198} 197}
199 198
@@ -201,10 +200,11 @@ void Array::Insert(Node* node, unsigned int pos)
201{ 200{
202 if (node) 201 if (node)
203 { 202 {
204 plist_array_insert_item(_node, node->GetPlist(), pos); 203 Node* clone = node->Clone();
204 plist_array_insert_item(_node, clone->GetPlist(), pos);
205 std::vector<Node*>::iterator it = _array.begin(); 205 std::vector<Node*>::iterator it = _array.begin();
206 it += pos; 206 it += pos;
207 _array.insert(it, node); 207 _array.insert(it, clone);
208 } 208 }
209} 209}
210 210