8 #include "Arp/System/Core/AppDomainSingleton.hxx" 9 #include "Arp/System/Core/Endianness.hpp" 18 namespace Arp {
namespace System {
namespace Commons
24 static const char* ArpBinaryDirVariableName;
27 static void Setup(
void);
28 static void SetupSettings(
int core);
29 static void SetupTrustStore(
const std::vector<String>& trustStorePaths,
const String& trustStoreEditPath);
30 static void SetupIdentityStore(
const std::vector<String>& identityStorePaths,
const String& identityStoreEditPath);
31 static void Dispose(
void);
34 static int64 GetTickCount(
void);
36 static String GetVariable(
const char* variableName);
38 static bool GetVariableValue(
const char* variableName, T& result);
39 static bool GetVariableValue(
const char* variableName,
String& value);
41 static bool GetDefaultVariableValue(
const char* variableName, T& result);
42 static bool GetDefaultVariableValue(
const char* variableName,
String& value);
44 static bool AddVariable(
const char* variableName,
const T& value);
45 static bool AddVariable(
const char* variableName,
const String& value);
47 static bool AddOverriddenVariable(
const char* variableName,
const T& value);
48 static bool AddOverriddenVariable(
const char* variableName,
const String& value);
49 static bool SetVariable(
const char* variableName,
const String& value);
50 static void LogVariables(
void);
53 static void RegisterEnvironmentVariables(
void);
54 static bool RegisterEnvironmentVariable(
const String& name,
const char* value);
63 using VariableNames = std::set<String>;
64 using EnvironmentVariables = std::map<String, String>;
68 ~Data(
void) =
default;
71 bool AddDefaultVariable(
const char* variableName,
const String& value);
72 bool AddOverriddenVariable(
const char* variableName,
const String& value);
73 bool SetDefaultVariable(
const char* variableName,
const String& value);
74 bool SetOverriddenVariable(
const char* variableName,
const String& value);
75 bool GetCurrentVariableValue(
const char* variableName,
const char*& pResult)
const;
76 bool GetDefaultVariableValue(
const char* variableName,
const char*& pResult)
const;
77 bool GetOverriddenVariableValue(
const char* variableName,
const char*& pResult)
const;
80 void GetVariableNames(VariableNames& result);
81 void LogVariables(
void);
84 static bool GetVariableValueFrom(
const EnvironmentVariables& items,
const char* variableName,
const char*& pResult);
87 EnvironmentVariables environmentVariables;
88 EnvironmentVariables overriddenVariables;
94 inline int64 Environment::GetTickCount()
96 return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
99 inline Endianness Environment::GetEndianness(
void)
101 return Endianness::Current;
105 inline bool Environment::GetVariableValue<String>(
const char* variableName,
String& result)
107 return GetVariableValue(variableName, result);
111 inline bool Environment::GetVariableValue(
const char* variableName, T& result)
114 if (!GetVariableValue(variableName, value))
119 std::istringstream iss(value.
CStr());
120 iss >> std::boolalpha >> result;
124 inline String Environment::GetVariable(
const char* variableName)
127 if (GetVariableValue(variableName, result))
132 return String::Empty;
136 inline bool Environment::GetDefaultVariableValue<String>(
const char* variableName,
String& result)
138 return GetDefaultVariableValue(variableName, result);
142 inline bool Environment::GetDefaultVariableValue(
const char* variableName, T& result)
145 if (!GetDefaultVariableValue(variableName, value))
150 std::istringstream iss(value.
CStr());
151 iss >> std::boolalpha >> result;
156 inline bool Environment::AddVariable(
const char* variableName,
const T& value)
158 std::stringstream ss;
159 ss << std::boolalpha << value;
160 return Environment::AddVariable(variableName,
String(ss.str()));
163 inline bool Environment::AddVariable(
const char* variableName,
const String& value)
165 return Data::GetInstance().AddDefaultVariable(variableName, value);
169 inline bool Environment::AddOverriddenVariable(
const char* variableName,
const T& value)
171 std::stringstream ss;
172 ss << std::boolalpha << value;
173 return Environment::AddOverriddenVariable(variableName,
String(ss.str()));
176 inline bool Environment::AddOverriddenVariable(
const char* variableName,
const String& value)
178 return Data::GetInstance().AddOverriddenVariable(variableName, value);
183 inline bool Environment::Data::GetCurrentVariableValue(
const char* variableName,
const char*& pResult)
const 186 if (GetOverriddenVariableValue(variableName, pResult))
191 return GetDefaultVariableValue(variableName, pResult);
194 inline bool Environment::Data::GetDefaultVariableValue(
const char* variableName,
const char*& pResult)
const 196 return GetVariableValueFrom(this->environmentVariables, variableName, pResult);
199 inline bool Environment::Data::GetOverriddenVariableValue(
const char* variableName,
const char*& pResult)
const 201 return GetVariableValueFrom(this->overriddenVariables, variableName, pResult);
const CharType * CStr() const
Gets the character data of this string.
Definition: BasicString.hxx:1507
Arp::BasicString< char8 > String
The Arp String class.
Definition: TypeSystem.h:27
Root namespace for the PLCnext API
This class implements the singleton pattern for singletons with process wide scope.
Definition: AppDomainSingleton.hxx:24
Endianness
This enum defines the endinannes of the target architecture.
Definition: Endianness.hpp:12
System components used by the System, Device, Plc or Io domains.
Definition: Environment.hpp:21
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:41