PLCnext API Documentation 25.0.2.69
DomainBase.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Base/Core/PimplPtr.hxx"
9
11{
12
32class ARP_EXPORT DomainBase
33{
34public: // Impl forward declaration
35 class Impl;
36
37public: // canonical construction/destruction/assignment
38 DomainBase(const DomainBase& arg) = delete;
39 DomainBase(DomainBase&& arg)noexcept = delete;
40 DomainBase& operator=(const DomainBase& arg) = delete;
41 DomainBase& operator=(DomainBase&& arg)noexcept = delete;
43
44public: // construction/destruction/assignment
46
47public: // setter/getter operations
48 bool IsBackgroundDomain(void)const;
49 bool IsForegroundDomain(void)const;
50
51 template<class T> requires std::is_base_of<DomainBase, T>::value
52 T& GetForegroundDomain(void);
53
54 template<class T> requires std::is_base_of<DomainBase, T>::value
55 const T& GetForegroundDomain(void)const;
56
57 template<class T> requires std::is_base_of<DomainBase, T>::value
58 T& GetBackgroundDomain(void);
59
60 template<class T> requires std::is_base_of<DomainBase, T>::value
61 const T& GetBackgroundDomain(void)const;
62
63public: // internal operations
64 Impl& GetImpl(void);
65 const Impl& GetImpl(void)const;
66
67private: // operations
68 DomainBase& GetForegroundDomainInternal(void);
69 const DomainBase& GetForegroundDomainInternal(void)const;
70 DomainBase& GetBackgroundDomainInternal(void);
71 const DomainBase& GetBackgroundDomainInternal(void)const;
72
73private: // Impl usings
75
76private: // Impl fields
77 Pimpl pimpl;
78};
79
80
82// inline methods of class DualDomain
83
84
87template<class T> requires std::is_base_of<DomainBase, T>::value
88inline T& DomainBase::GetForegroundDomain()
89{
90 return static_cast<T&>(this->GetForegroundDomainInternal());
91}
92
95template<class T> requires std::is_base_of<DomainBase, T>::value
96inline const T& DomainBase::GetForegroundDomain() const
97{
98 return static_cast<const T&>(this->GetForegroundDomainInternal());
99}
100
103template<class T> requires std::is_base_of<DomainBase, T>::value
104inline T& DomainBase::GetBackgroundDomain()
105{
106 return static_cast<T&>(this->GetBackgroundDomainInternal());
107}
108
111template<class T> requires std::is_base_of<DomainBase, T>::value
112inline const T& DomainBase::GetBackgroundDomain() const
113{
114 return static_cast<const T&>(this->GetBackgroundDomainInternal());
115}
116
117
118} // end of namespace Arp::Plc::Domain::Commons
Adapter class to implement PImpl idiom.
Definition: PimplPtr.hxx:15
This class is used as base class of structures, which shall be adapted by DualDomain to support downl...
Definition: DomainBase.hpp:33
DomainBase(void)
Default constructor.
~DomainBase(void)
The default destructor.
Namespace for interface types of the PLC domain