Imported Upstream version 17.23.5
[platform/upstream/libzypp.git] / zypp / zyppng / base / base.cc
1 #include <zypp/zyppng/base/private/base_p.h>
2
3 namespace zyppng {
4
5   BasePrivate::~BasePrivate()
6   { }
7
8   Base::Base() : d_ptr( new BasePrivate )
9   {
10     d_ptr->z_ptr = this;
11   }
12
13   Base::~Base()
14   { }
15
16   Base::Base ( BasePrivate &dd )
17     : d_ptr ( &dd )
18   {
19     d_ptr->z_ptr = this;
20   }
21
22   Base::WeakPtr Base::parent() const
23   {
24     return d_func()->parent;
25   }
26
27   void Base::addChild( Base::Ptr child )
28   {
29     Z_D();
30     if ( !child )
31       return;
32
33     //we are already the parent
34     auto childParent = child->d_func()->parent.lock();
35     if ( childParent.get() == this )
36       return;
37
38     if ( childParent ) {
39       childParent->removeChild( child );
40     }
41
42     d->children.insert( child );
43
44     auto tracker = this->weak_this<Base>();
45     child->d_func()->parent = tracker;
46   }
47
48   void Base::removeChild( Base::Ptr child )
49   {
50     if ( !child )
51       return;
52
53     //we are not the child of this object
54     if ( child->d_func()->parent.lock().get() != this )
55       return;
56
57     Z_D();
58     d->children.erase( child );
59     child->d_func()->parent.reset();
60   }
61
62   const std::unordered_set<Base::Ptr> &Base::children() const
63   {
64     return d_func()->children;
65   }
66
67 } // namespace zyppng