ACF $AcfVersion:0$
TSimComponentsFactory.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// ACF includes
6#include <istd/TIFactory.h>
7#include <istd/CClassInfo.h>
8#include <icomp/IComponent.h>
11
12
13namespace icomp
14{
15
16
23template <class Base>
25{
26public:
28
30 {
31 return &m_base;
32 }
33
34 // reimplemented (istd::IFactoryInfo)
35 virtual istd::IFactoryInfo::KeyList GetFactoryKeys() const override;
36
37 // reimplemented (istd::TIFactory<icomp::IComponent>)
38 virtual istd::TUniqueInterfacePtr<icomp::IComponent> CreateInstance(const QByteArray& keyId = "") const override;
39
40 // reimplemented (icomp::ICompositeComponent)
41 virtual IComponentSharedPtr GetSubcomponent(const QByteArray& componentId) const override;
42 virtual IComponentContextSharedPtr GetSubcomponentContext(const QByteArray& componentId) const override;
43 virtual IComponentUniquePtr CreateSubcomponent(const QByteArray& componentId) const override;
44 virtual void OnSubcomponentDeleted(const IComponent* subcomponentPtr) override;
45
46 // reimplemented (icomp::IComponent)
47 virtual const icomp::IComponent* GetParentComponent(bool ownerOnly = false) const override;
48 virtual void* GetInterface(const istd::CClassInfo& interfaceType, const QByteArray& subId = "") override;
50 virtual void SetComponentContext(
51 const icomp::IComponentContextSharedPtr& contextPtr,
52 const icomp::IComponent* parentPtr,
53 bool isParentOwner) override;
54private:
55 KeyList m_factoryKeys;
56
58};
59
60
61// public methods
62
63template <class Base>
65{
66 m_factoryKeys.insert(istd::CClassInfo::GetName<Base>());
67 m_base.InitComponent();
68}
69
70// reimplemented (istd::IFactoryInfo)
71
72template <class Base>
77
78
79// reimplemented (istd::TIFactory<icomp::IComponent>)
80
81template <class Base>
83{
84 if (keyId.isEmpty() || m_factoryKeys.contains(keyId)){
86 if (retVal != nullptr){
87 retVal->SetComponentContext(m_base.GetComponentContext(), this, false);
88
90 }
91 }
92
94}
95
96
97// reimplemented (icomp::ICompositeComponent)
98
99template <class Base>
101{
102 return m_base.GetSubcomponent(componentId);
103}
104
105
106template <class Base>
108{
109 return m_base.GetSubcomponentContext(componentId);
110}
111
112
113template <class Base>
115{
116 IComponentUniquePtr componentPtr = m_base.CreateSubcomponent(componentId);
117 if (componentPtr != NULL){
118 return componentPtr;
119 }
120
121 return icomp::IComponentUniquePtr(CreateInstance(componentId).PopInterfacePtr());
122}
123
124
125template <class Base>
127{
128 m_base.OnSubcomponentDeleted(subcomponentPtr);
129}
130
131
132// reimplemented (icomp::IComponent)
133
134template <class Base>
136{
137 return m_base.GetParentComponent(ownerOnly);
138}
139
140
141template <class Base>
142void* TSimComponentsFactory<Base>::GetInterface(const istd::CClassInfo& interfaceType, const QByteArray& subId)
143{
144 return m_base.GetInterface(interfaceType, subId);
145}
146
147
148template <class Base>
150{
151 return m_base.GetComponentContext();
152}
153
154
155template <class Base>
157 const icomp::IComponentContextSharedPtr& contextPtr,
158 const icomp::IComponent* parentPtr,
159 bool isParentOwner)
160{
161 m_base.SetComponentContext(contextPtr, parentPtr, isParentOwner);
162}
163
164
165} // namespace icomp
166
167
Main component interface.
Definition IComponent.h:32
virtual const icomp::IComponent * GetParentComponent(bool ownerOnly=false) const =0
Get parent of this component.
virtual void SetComponentContext(const IComponentContextSharedPtr &contextPtr, const icomp::IComponent *parentPtr, bool isParentOwner)=0
Set component context of this component.
virtual void * GetInterface(const istd::CClassInfo &interfaceType, const QByteArray &subId="")=0
Get access to specified component interface.
Composite component interface.
Wrapper of end component implementation used to correct control of component life-cycle.
Simulation wrapper of component.
void InitComponent()
Initialilze component after setting all its attributes and references.
Simulation wrapper of component.
virtual void OnSubcomponentDeleted(const IComponent *subcomponentPtr) override
Called if subcomponent is removed from memory.
virtual icomp::IComponentContextSharedPtr GetComponentContext() const override
Get access to component context describing all application-specified component information loaded fro...
virtual IComponentContextSharedPtr GetSubcomponentContext(const QByteArray &componentId) const override
Get access to context of subcomponent using its ID.
virtual istd::IFactoryInfo::KeyList GetFactoryKeys() const override
Returns all possible keys for this factory.
virtual const icomp::IComponent * GetParentComponent(bool ownerOnly=false) const override
Get parent of this component.
virtual void SetComponentContext(const icomp::IComponentContextSharedPtr &contextPtr, const icomp::IComponent *parentPtr, bool isParentOwner) override
Set component context of this component.
virtual IComponentUniquePtr CreateSubcomponent(const QByteArray &componentId) const override
Create instance of subcomponent using its ID.
virtual void * GetInterface(const istd::CClassInfo &interfaceType, const QByteArray &subId="") override
Get access to specified component interface.
virtual istd::TUniqueInterfacePtr< icomp::IComponent > CreateInstance(const QByteArray &keyId="") const override
Create an instance of the object, mapped to the keyId keyId.
virtual IComponentSharedPtr GetSubcomponent(const QByteArray &componentId) const override
Get access to subcomponent using its ID.
TSimComponentWrap< Base > * operator->()
Represents platform independent type info and provide set of static class manipulation functions.
Definition CClassInfo.h:23
QSet< QByteArray > KeyList
Generic interface for a factory.
Definition TIFactory.h:19
Unique ownership smart pointer for interface types.
#define NULL
Definition istd.h:74
Package with interfaces and class used for components concept.
std::unique_ptr< IComponent > IComponentUniquePtr
Definition IComponent.h:72
std::shared_ptr< icomp::IComponentContext > IComponentContextSharedPtr
std::shared_ptr< IComponent > IComponentSharedPtr
Definition IComponent.h:71