PLCnext API Documentation 25.0.2.69
Environment.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Core/Endianness.hpp"
9#include <chrono>
10#include <sstream>
11#include <vector>
12#include <set>
13#include <map>
14
15namespace Arp { namespace System { namespace Commons
16{
17
19{
20public: // Properties
21 static const char* ArpBinaryDirVariableName;
22
23public: // setup/dispose operations
24 static void Setup(void);
25 static void SetupSettings(int core);
26 static void SetupSecuritySettings(const String& securitySettingsPath);
27 static void SetupTrustStore(const std::vector<String>& trustStorePaths, const String& trustStoreEditPath);
28 static void SetupIdentityStore(const std::vector<String>& identityStorePaths, const String& identityStoreEditPath);
29 static void Dispose(void);
30
31public: // static operations
32 static int64 GetTickCount(void);
33 static Endianness GetEndianness(void);
34 static String GetVariable(const char* variableName);
35 template<class T>
36 static bool GetVariableValue(const char* variableName, T& result);
37 static bool GetVariableValue(const char* variableName, String& value);
38 template<class T>
39 static bool GetDefaultVariableValue(const char* variableName, T& result);
40 static bool GetDefaultVariableValue(const char* variableName, String& value);
41 template<class T>
42 static bool AddVariable(const char* variableName, const T& value);
43 static bool AddVariable(const char* variableName, const String& value);
44 template<class T>
45 static bool AddOverriddenVariable(const char* variableName, const T& value);
46 static bool AddOverriddenVariable(const char* variableName, const String& value);
47 static bool SetVariable(const char* variableName, const String& value);
48 static void LogVariables(void);
49 static void RegisterEnvironmentVariables(void);
50
51private: // static methods
52 static bool RegisterEnvironmentVariable(const String& name, const char* value);
53
54private: // nested class EnvData
55 class Data
56 {
57 friend class Environment;
58
59 public: // usings
60 using Instance = Data;
61 using InstancePtr = std::unique_ptr<Instance>;
62 using VariableNames = std::set<String>; // <name>
63 using EnvironmentVariables = std::map<String, String>; // <name, value>
64
65 public: // Constructors
66 Data(void) = default;
67
68 public: // static singleton operations
69 static Instance& CreateInstance(void);
70 static bool IsCreated(void);
71 static void DisposeInstance(void);
72 static Instance& GetInstance(void);
73
74 public: // operations
75 bool AddDefaultVariable(const char* variableName, const String& value);
76 bool AddOverriddenVariable(const char* variableName, const String& value);
77 bool SetDefaultVariable(const char* variableName, const String& value);
78 bool SetOverriddenVariable(const char* variableName, const String& value);
79 bool GetCurrentVariableValue(const char* variableName, const char*& pResult)const;
80 bool GetDefaultVariableValue(const char* variableName, const char*& pResult)const;
81 bool GetOverriddenVariableValue(const char* variableName, const char*& pResult)const;
82
83 private: // methods
84 void GetVariableNames(VariableNames& result);
85 void LogVariables(void);
86
87 private: // static methods
88 static bool GetVariableValueFrom(const EnvironmentVariables& items, const char* variableName, const char*& pResult);
89
90 private: //fields
91 EnvironmentVariables environmentVariables;
92 EnvironmentVariables overriddenVariables;
93
94 private: // static fields
95 static InstancePtr instancePtr;
96 };
97};
98
100// inline methods of class Environment
101
102template<>
103inline bool Environment::GetVariableValue<String>(const char* variableName, String& result)
104{
105 return GetVariableValue(variableName, result);
106}
107
108template<class T>
109inline bool Environment::GetVariableValue(const char* variableName, T& result)
110{
111 String value;
112 if (!GetVariableValue(variableName, value))
113 {
114 return false;
115 }
116 // else
117 std::istringstream iss(value.CStr());
118 iss >> std::boolalpha >> result;
119 return !iss.fail();
120}
121
122template<>
123inline bool Environment::GetDefaultVariableValue<String>(const char* variableName, String& result)
124{
125 return GetDefaultVariableValue(variableName, result);
126}
127
128template<class T>
129inline bool Environment::GetDefaultVariableValue(const char* variableName, T& result)
130{
131 String value;
132 if (!GetDefaultVariableValue(variableName, value))
133 {
134 return false;
135 }
136 // else
137 std::istringstream iss(value.CStr());
138 iss >> std::boolalpha >> result;
139 return !iss.fail();
140}
141
142template<class T>
143inline bool Environment::AddVariable(const char* variableName, const T& value)
144{
145 std::stringstream ss;
146 ss << std::boolalpha << value;
147 return Environment::AddVariable(variableName, String(ss.str()));
148}
149
150template<class T>
151inline bool Environment::AddOverriddenVariable(const char* variableName, const T& value)
152{
153 std::stringstream ss;
154 ss << std::boolalpha << value;
155 return Environment::AddOverriddenVariable(variableName, String(ss.str()));
156}
157
158}}} // end of namespace Arp::System::Commons
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
const CharType * CStr(void) const
Gets the character data of this string.
Definition: String.ipp:1395
Definition: Environment.hpp:19
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:39
@ Instance
Instance member or field, respectively.
Root namespace for the PLCnext API