PLCnext API Documentation 25.0.2.69
DataInfoProvider.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Core/Enumerator.hxx"
9#include "Arp/Plc/Commons/Meta/IDataInfoProvider.hpp"
10#include "Arp/Plc/Commons/Meta/TypeSystem/DataInfoDeduction.hxx"
11#include "Arp/Plc/Commons/Esm/ProgramProviderBase.hpp"
12#include "Arp/Plc/Commons/Meta/ChangeDataInfoProvider.hpp"
13#include <map>
14
15// forwards
16namespace Arp { namespace Plc { namespace Commons { namespace Esm
17{
18class ProgramComponentBase;
19}}}} // end of namespace Arp::Plc::Commons::Esm
20
21namespace Arp { namespace Plc { namespace Commons { namespace Meta
22{
23
24// forwards
25class ChangeDataInfoProvider;
26
29
30
36{
38
39public: // typedefs/usings
40 using Roots = std::map<String, DataInfo>;
41
42private: // nested types
43 class RootsEnumerator : public Enumerator<const DataInfo&>
44 {
45 public: // construcion
46 RootsEnumerator(const Roots& roots);
47
48 public: // Enumerator<DataInfo> operations
49 bool MoveNext(void)override;
50
51 private:
52 const Roots& roots;
53 Roots::const_iterator currentIterator;
54 Roots::const_iterator endIterator;
55 bool isFirstMove = true;
56 };
57
58public: // construction/destruction
59 DataInfoProvider(const char* libraryNamespace, ProgramProviderBase* pProgramProvider = nullptr);
61 DataInfoProvider(const DataInfoProvider& arg) = default;
69 ~DataInfoProvider(void) override = default;
70
71public: // getter properties
72
73 const String& GetLibraryNamespace() const;
74
76
77public: // operations
78 void Reset(void);
79 void AddRootInfo(const DataInfo& rootInfo);
80 void RemoveRootInfo(const String& name);
86 template<class T>
87 void AddRoot(const char* name, const T& value);
88
89public: // IDataInfoProvider operations
91 DataInfo GetRoot(const String& name)override;
92
93private: // methods
94 void AddDataInfo(const DataInfo& dataInfo);
95 void EnsureValidName(const DataInfo& dataInfo) const;
96 void RemoveDataInfo(const String& localVariableName);
97
98private: // fields
99 String libraryNamespace;
100 ProgramProviderBase* pProgramProvider = nullptr; // Deprecated (binary compatibility). Keeping track of programs is handled in ProgamProviderBase.
101 Roots roots;
102 ChangeDataInfoProvider backgroundProvider;
103};
105// inline methods of class DataInfoProvider
106template<class T>
107inline void DataInfoProvider::AddRoot(const char* name, const T& value)
108{
109 DataInfoDeduction getDataInfo(this->libraryNamespace);
110 this->AddDataInfo(getDataInfo(name, value));
111}
112
113}}}} // end of namespace Arp::Plc::Commons::Meta
This class defines a base class for all enumerator implementations and some predefined enumerators as...
Definition: Enumerator.hxx:24
Declares the interface of the enumerator pattern, which is leaned on .NET enumerator idiom.
Definition: IEnumerator.hxx:49
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Definition: ProgramProviderBase.hpp:16
Decorator for DataInfoProvider to set IsBackgroundDomain = true
Definition: ChangeDataInfoProvider.hpp:22
Provides information of component root variables
Definition: DataInfoProvider.hpp:36
DataInfoProvider & operator=(const DataInfoProvider &arg)=default
Copy assignment operator.
IDataInfoProvider & GetBackgroundProvider(void)
Returns an IDataInfoProvider for the background domain
Definition: DataInfoProvider.cpp:31
IEnumerator< constDataInfo & >::Ptr GetRoots(void) override
Returns an IEnumerator to enumerate all root variables of the component
Definition: DataInfoProvider.cpp:36
void AddRoot(const char *name, const T &value)
Deduces the required information of a root variable and add it
Definition: DataInfoProvider.hpp:107
DataInfoProvider(const char *libraryNamespace, ProgramProviderBase *pProgramProvider=nullptr)
Constructs an DataInfoProvider instance.
Definition: DataInfoProvider.cpp:15
DataInfoProvider(DataInfoProvider &&arg)=default
Move constructor
DataInfoProvider(const DataInfoProvider &arg)=default
Copy constructor.
DataInfo GetRoot(const String &name) override
Returns the requested root variable of the component
Definition: DataInfoProvider.cpp:41
const String & GetLibraryNamespace() const
Returns the library namespace
Definition: DataInfoProvider.cpp:23
void Reset(void)
Removes all variable information
Definition: DataInfoProvider.cpp:75
void AddRootInfo(const DataInfo &rootInfo)
Adds information about a component root
Definition: DataInfoProvider.cpp:110
DataInfoProvider & operator=(DataInfoProvider &&arg)=default
Move assignment operator
~DataInfoProvider(void) override=default
Destructs this instance and frees all resources.
void RemoveRootInfo(const String &name)
Removes the information about the specified variable
Definition: DataInfoProvider.cpp:117
Provides detailed informations for the respective data object.
Definition: DataInfo.hpp:29
Interface to provide information about component roots
Definition: IDataInfoProvider.hpp:18
Definition: DataInfoDeduction.hxx:14
Namespace for the type information of the Meta component
Root namespace for the PLCnext API