Browse Source

Test: PityTest - PityTree add copy assign operator

master
heck 4 years ago
parent
commit
9bd1c7355c
  1. 5
      src/PityTree.hh
  2. 24
      src/PityTree.hxx

5
src/PityTree.hh

@ -29,6 +29,10 @@ namespace pEp {
explicit PityTree(T& self, const std::string& name, T& parent); explicit PityTree(T& self, const std::string& name, T& parent);
explicit PityTree(const PityTree& rhs, T& owner); explicit PityTree(const PityTree& rhs, T& owner);
// copy-assign
PityTree& operator=(const PityTree<T>& rhs);
// clone
virtual PityTree* clone() = 0; virtual PityTree* clone() = 0;
// Append // Append
@ -62,6 +66,7 @@ namespace pEp {
void setParent(T* const parent); void setParent(T* const parent);
private: private:
void _cloneChildRefs(const PityTree<T>& rhs);
// Fields // Fields
std::string _nodename; std::string _nodename;
T& _self; T& _self;

24
src/PityTree.hxx

@ -44,12 +44,15 @@ namespace pEp {
{ {
_nodename = rhs._nodename; _nodename = rhs._nodename;
_parent = nullptr; _parent = nullptr;
_cloneChildRefs(rhs);
}
for (const ChildRef& cr : rhs.getChildRefs()) { template<class T>
_childobjs.push_back(ChildObj(cr.second.clone())); PityTree<T>& PityTree<T>::operator=(const PityTree<T>& rhs) {
T& ret = *_childobjs.back().get(); _nodename = rhs._nodename;
addRef(ret); _parent = nullptr;
} _cloneChildRefs(rhs);
return *this;
} }
template<class T> template<class T>
@ -196,6 +199,17 @@ namespace pEp {
return name; return name;
} }
// When you copy a treenode, you need to create a copy of all children
// and take ownership
template<class T>
void PityTree<T>::_cloneChildRefs(const PityTree<T>& rhs) {
for (const ChildRef& cr : rhs.getChildRefs()) {
_childobjs.push_back(ChildObj(cr.second.clone()));
T& ret = *_childobjs.back().get();
addRef(ret);
}
}
} // namespace PityTest11 } // namespace PityTest11
} // namespace pEp } // namespace pEp

Loading…
Cancel
Save