3#include "spark/base/Exception.h"
5namespace spark::patterns
7 template <
typename DerivedType,
template <
typename>
class Deleter>
8 Composite<DerivedType, Deleter>::Composite(DerivedType* parent)
13 template <
typename DerivedType,
template<
typename>
typename Deleter>
14 Composite<DerivedType, Deleter>::~Composite()
17 m_parent->remove(
static_cast<DerivedType*
>(
this));
20 for (std::size_t i = 0; i < m_children.size(); ++i)
21 Deleter<DerivedType>()(m_children[i]);
24 template <
typename DerivedType,
template<
typename>
typename Deleter>
25 DerivedType* Composite<DerivedType, Deleter>::parent()
30 template <
typename DerivedType,
template<
typename>
typename Deleter>
31 const DerivedType* Composite<DerivedType, Deleter>::parent()
const
36 template <
typename DerivedType,
template<
typename>
typename Deleter>
37 DerivedType* Composite<DerivedType, Deleter>::root()
39 auto* ptr =
static_cast<DerivedType*
>(
this);
40 while (ptr->parent() !=
nullptr)
45 template <
typename DerivedType,
template<
typename>
typename Deleter>
46 const DerivedType* Composite<DerivedType, Deleter>::root()
const
48 const auto* ptr =
static_cast<const DerivedType*
>(
this);
49 while (ptr->parent() !=
nullptr)
54 template <
typename DerivedType,
template<
typename>
typename Deleter>
55 std::vector<DerivedType*> Composite<DerivedType, Deleter>::children()
const
60 template <
typename DerivedType,
template<
typename>
typename Deleter>
61 void Composite<DerivedType, Deleter>::add(DerivedType* child)
63 auto it = std::ranges::find(m_children, child);
64 if (it != m_children.end())
66 m_children.push_back(child);
69 template <
typename DerivedType,
template<
typename>
typename Deleter>
70 void Composite<DerivedType, Deleter>::remove(DerivedType* child)
72 const auto it = std::ranges::find(m_children, child);
73 if (it == m_children.end())
78 template <
typename DerivedType,
template<
typename>
typename Deleter>
79 void Composite<DerivedType, Deleter>::setParent(DerivedType* parent)
83 m_parent->remove(
static_cast<DerivedType*
>(
this));
90 m_parent->add(
static_cast<DerivedType*
>(
this));
Exception thrown when an argument is not valid.
Definition Exception.h:32