PLCnext API Documentation 25.0.2.69
DualDomain.hxx
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Plc/Domain/Commons/DomainSelector.hpp"
9#include "Arp/Plc/Domain/Commons/DomainBase.hpp"
10
12{
13
20template<class T>
22{
23public: // usings
24 using Domain = T;
25 static_assert(std::is_base_of<DomainBase, T>::value);
26
27public: // construction
28 template <class ...Args>
29 explicit DualDomain(Args&& ... args);
30
31public: // setter/getter operations
32 T& Get(bool backgroundDomain);
33 const T& Get(bool backgroundDomain)const;
34
35public: // operations
36 void SwapDomains(bool simulate);
37
38private: // fields
39 Domain domain1;
40 Domain domain2;
41 DomainSelector domainSelector;
42};
43
45// inline methods of class DualDomain
46
53template<class T>
54template <class ...Args>
55inline DualDomain<T>::DualDomain(Args&& ... args)
56 : domain1(args...)
57 , domain2(args...)
58 , domainSelector(this->domain1, this->domain2)
59{
60}
61
65template<class T>
66inline T& DualDomain<T>::Get(bool backgroundDomain)
67{
68 return static_cast<T&>(this->domainSelector.Get(backgroundDomain));
69}
70
74template<class T>
75inline const T& DualDomain<T>::Get(bool backgroundDomain)const
76{
77 return static_cast<const T&>(this->domainSelector.Get(backgroundDomain));
78}
79
84template<class T>
85inline void DualDomain<T>::SwapDomains(bool simulate)
86{
87 return this->domainSelector.SwapDomains(simulate);
88}
89
90} // end of namespace Arp::Plc::Domain::Commons
This class is for internal use only. Never use it directly.
Definition: DomainSelector.hpp:21
This class adapts a domain structure, which shall be doubled for supporting download-changes.
Definition: DualDomain.hxx:22
DualDomain(Args &&... args)
Constructs an DualDomain instance.
Definition: DualDomain.hxx:55
void SwapDomains(bool simulate)
Swaps the domains, so that the foreground domain becomes the background domain and vice versa.
Definition: DualDomain.hxx:85
T & Get(bool backgroundDomain)
Gets a reference to one of the domain instances.
Definition: DualDomain.hxx:66
Namespace for interface types of the PLC domain