ICF 3.1.1.10
Technical documentation of ICF Libraries
TSimComponentWrap.h
Go to the documentation of this file.
1/********************************************************************************
2** This file is part of the ICF Framework. Copyright (C) Witold Gantzke & Kirill Lepskiy
3** ICF Framework may be used under the terms of the LGPL License v. 2.1 by the Free Software Foundation.
4********************************************************************************/
5
6#pragma once
7
8
9// ICF includes
10#include <istd/CClassInfo.h>
14
15
16namespace icomp
17{
18
19
24template <class Base>
26 public TComponentWrap<Base>,
28 virtual public ICompositeComponent
29{
30public:
33
35
39 void InitComponent();
40
41 // reimplemented (icomp::IComponentContext)
42 virtual const QByteArray& GetContextId() const;
43
44 // reimplemented (icomp::ICompositeComponent)
45 virtual IComponent* GetSubcomponent(const QByteArray& componentId) const;
46 virtual const IComponentContext* GetSubcomponentContext(const QByteArray& componentId) const;
47 virtual std::unique_ptr<IComponent> CreateSubcomponent(const QByteArray& componentId) const;
48 virtual void OnSubcomponentDeleted(const IComponent* subcomponentPtr);
49
50 // reimplemented (icomp::IComponent)
51 virtual const ICompositeComponent* GetParentComponent(bool ownerOnly = false) const;
52};
53
54
55// public methods
56
57template <class Base>
59: BaseClass(),
60 BaseClass2(&BaseClass::GetComponentStaticInfo())
61{
62}
63
64
65template <class Base>
67{
68 SetComponentContext(this, nullptr, false);
69}
70
71
72// reimplemented (icomp::IComponentContext)
73
74template <class Base>
76{
77 static QByteArray id = istd::CClassInfo::GetName<Base>();
78
79 return id;
80}
81
82
83// reimplemented (icomp::ICompositeComponent)
84
85template <class Base>
86IComponent* TSimComponentWrap<Base>::GetSubcomponent(const QByteArray& componentId) const
87{
88 BaseClass2::ComponentsMap::const_iterator iter = BaseClass2::m_componentsMap.constFind(componentId);
89
90 if (iter != BaseClass2::m_componentsMap.constEnd()){
91 return iter.value();
92 }
93
94 return nullptr;
95}
96
97
98template <class Base>
99const IComponentContext* TSimComponentWrap<Base>::GetSubcomponentContext(const QByteArray& /*componentId*/) const
100{
101 return nullptr;
102}
103
104
105template <class Base>
106std::unique_ptr<IComponent> TSimComponentWrap<Base>::CreateSubcomponent(const QByteArray& componentId) const
107{
108 FactoriesMap::const_iterator iter = m_factoriesMap.constFind(componentId);
109 if (iter != m_factoriesMap.constEnd()){
110 Q_ASSERT(iter.value() != nullptr);
111
112 return iter.value()->CreateInstance();
113 }
114
115 return nullptr;
116}
117
118
119template <class Base>
121{
122 qFatal("Simulated component cannot have sub-components");
123}
124
125
126// reimplemented (icomp::IComponent)
127
128template <class Base>
130{
131 if (ownerOnly){
132 return nullptr;
133 }
134 else{
135 return const_cast<TSimComponentWrap<Base>* >(this);
136 }
137}
138
139
140} // namespace icomp
141
142
Provide session context of component.
Main component interface.
Definition IComponent.h:35
Composite component interface.
Wrapper of end component implementation used to correct control of component life-cycle.
Simulation wrapper of component.
virtual IComponent * GetSubcomponent(const QByteArray &componentId) const
Get access to subcomponent using its ID.
virtual const QByteArray & GetContextId() const
Get ID of this component in the context tree.
TComponentWrap< Base > BaseClass
virtual const ICompositeComponent * GetParentComponent(bool ownerOnly=false) const
Get parent of this component.
virtual void OnSubcomponentDeleted(const IComponent *subcomponentPtr)
Called if subcomponent is removed from memory.
virtual std::unique_ptr< IComponent > CreateSubcomponent(const QByteArray &componentId) const
Create instance of subcomponent using its ID.
void InitComponent()
Initialilze component after setting all its attributes and references.
virtual const IComponentContext * GetSubcomponentContext(const QByteArray &componentId) const
Get access to context of subcomponent using its ID.
CSimComponentContextBase BaseClass2
const QByteArray & GetName() const
Get undecorated and platform undependent class name.
Definition CClassInfo.h:150
Package with interfaces and class used for components concept.

© Witold Gantzke and Kirill Lepskiy