PLCnext API Documentation  22.9.0.33
ProgramComponentBase.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include "Arp/System/Acf/ComponentBase.hpp"
9 #include "Arp/System/Acf/IApplication.hpp"
10 #include "Arp/Plc/Commons/Esm/IProgramComponent.hpp"
11 #include "Arp/Plc/Commons/Esm/ProgramProviderBase.hpp"
12 #include "Arp/Plc/Commons/Meta/IMetaComponent.hpp"
13 #include "Arp/Plc/Commons/Meta/DataInfoProvider.hpp"
14 
15 namespace Arp { namespace Plc { namespace Commons { namespace Esm
16 {
17 
18 using namespace Arp;
19 using namespace Arp::System::Acf;
20 using namespace Arp::Plc::Commons::Meta;
21 
23 {
24 public: // construction/destruction
26  ProgramComponentBase(const char* libraryNamespace, ProgramProviderBase& programProvider);
28  ~ProgramComponentBase(void) = default;
29 
30 public: // IComponent operations
31  void Initialize(void);
32  void SetupConfig(void);
33  void ResetConfig(void);
34 
35 public: // IMetaComponentBase operations
36  IProgramProvider& GetProgramProvider(bool useBackgroundDomain)override;
37  IDataInfoProvider& GetDataInfoProvider(bool useBackgroundDomain)override;
38  IDataNavigator* GetDataNavigator(void)override;
39 
40 protected: // virtual operation to override
41  virtual void RegisterComponentPorts(void);
42 
43 private:
44  void OnProgramAdded(IProgram::Ptr programPtr);
45  void OnProgramRemoved(IProgram::Ptr programPtr);
46 
47 
48 private: // deleted methods
50  ProgramComponentBase(const ProgramComponentBase& arg) = delete;
52  ProgramComponentBase& operator=(const ProgramComponentBase& arg) = delete;
53 
54 protected: // fields
55  DataInfoProvider dataInfoProvider;
56 
57 private: // fields
58  ProgramProviderBase& programProvider;
59 };
60 
62 // inline methods of class ProgramComponentBase
63 
64 
65 inline IProgramProvider& ProgramComponentBase::GetProgramProvider(bool /*useBackgroundDomain*/)
66 {
67  return this->programProvider;
68 }
69 
70 
71 
73 {
74  return useBackgroundDomain ? this->dataInfoProvider.GetBackgroundProvider() : this->dataInfoProvider;
75 }
76 
78 {
79  return nullptr;
80 }
81 
82 
83 }}}} // end of namespace Arp::Plc::Commons::Esm
Interface to realizes an access to a plc program provider.
Definition: IProgramComponent.hpp:18
Interface to realizes an program provider.
Definition: IProgramProvider.hpp:17
std::shared_ptr< IProgram > Ptr
Shared pointer type of IProgram.
Definition: IProgram.hpp:22
Definition: ProgramComponentBase.hpp:23
ProgramComponentBase(const char *libraryNamespace, ProgramProviderBase &programProvider)
Constructs an ProgramComponentBase instance.
IDataInfoProvider & GetDataInfoProvider(bool useBackgroundDomain) override
Gets the IDataInfoProvider of this component.
Definition: ProgramComponentBase.hpp:72
~ProgramComponentBase(void)=default
Destructs this instance and frees all resources.
IProgramProvider & GetProgramProvider(bool useBackgroundDomain) override
Returns the program provider of this component.
Definition: ProgramComponentBase.hpp:65
IDataNavigator * GetDataNavigator(void) override
Gets the specialized IDataNavigator of this component.
Definition: ProgramComponentBase.hpp:77
Definition: ProgramProviderBase.hpp:16
Provides information of component root variables
Definition: DataInfoProvider.hpp:36
Interface to provide information about component roots
Definition: IDataInfoProvider.hpp:18
Interface for all components providing meta data
Definition: IMetaComponent.hpp:20
Namespace for the Meta component
Definition: ArrayDimension.hpp:15
This is the namespace of the Application Component Framework.
Definition: ComponentBase.hpp:13
Root namespace for the PLCnext API