PLCnext API Documentation 25.0.2.69
BasicVersion.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Core/BasicString.hxx"
9
10#ifndef ARP_USE_ARP_SYSTEM_CORE
11
12// nothing to include here, included by Arp.hpp
13
14#else
15
16#ifndef ARP_INSIDE_ARP_H
17 #error Never include 'BasicVersion.hxx' directly, just include 'Arp.h'
18#endif
19
20namespace Arp
21{
22
41class BasicVersion
42{
43public: // typedefs
45 typedef BasicString<char> String;
46
47public: // construction/destruction
49 BasicVersion(void) = default;
50
56 BasicVersion(uint8 majorVersion, const String& state = String(), const String& name = String());
57
64 BasicVersion(uint8 majorVersion, uint8 minorVersion, const String& state = String(), const String& name = String());
65
72 BasicVersion(uint8 majorVersion, uint8 minorVersion, uint8 patchVersion, const String& state = String(), const String& name = String());
73
81 BasicVersion(uint8 majorVersion, uint8 minorVersion, uint8 patchVersion, uint32 buildVersion, const String& state = String(), const String& name = String());
82
85 BasicVersion(const BasicVersion& arg) = default;
86
89 BasicVersion(BasicVersion&& arg) = default;
90
94 BasicVersion& operator=(const BasicVersion& arg) = default;
95
97 virtual ~BasicVersion(void) = default;
98
99public: // static factory operations
104 static BasicVersion Parse(const String& input);
105
110 static bool TryParse(const String& input, BasicVersion& result);
111
112public: // compare operators
116 bool operator==(const BasicVersion& arg)const;
117
121 bool operator!=(const BasicVersion& arg)const;
122
126 bool operator>(const BasicVersion& arg)const;
127
131 bool operator<(const BasicVersion& arg)const;
132
136 bool operator>=(const BasicVersion& arg)const;
137
141 bool operator<=(const BasicVersion& arg)const;
142
143public: // setter/getter operations
146 String GetName(void)const;
147
150 uint8 GetMajor(void)const;
151
154 uint8 GetMinor(void)const;
155
158 uint8 GetPatch(void)const;
159
162 uint32 GetBuild(void)const;
163
166 String GetState(void)const;
167
174 const BasicVersion& GetBuildVersion() const;
175
176public: // operations
179 String ToString(void) const;
180
181private: // static methods
182 static bool TryParseFullVersion(const String& input, BasicVersion& result);
183 static bool TryParseInternalVersion(const String& input, BasicVersion& result);
184
185private: // fields
186 String name;
187 uint8 majorVersion = 0;
188 uint8 minorVersion = 0;
189 uint8 patchVersion = 0;
190 uint32 buildVersion = 0;
191 String state;
192};
193
195// inline methods of class BasicVersion
196
197inline BasicVersion::BasicVersion(uint8 majorVersionArg, const String& stateArg, const String& nameArg)
198 : name(nameArg), majorVersion(majorVersionArg), minorVersion(0), patchVersion(0), buildVersion(0), state(stateArg)
199{
200}
201
202inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, const String& stateArg, const String& nameArg)
203 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(0), buildVersion(0), state(stateArg)
204{
205}
206
207inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, uint8 patchVersionArg, const String& stateArg, const String& nameArg)
208 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(patchVersionArg), buildVersion(0), state(stateArg)
209{
210}
211
212inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, uint8 patchVersionArg, uint32 buildVersionArg, const String& stateArg, const String& nameArg)
213 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(patchVersionArg), buildVersion(buildVersionArg), state(stateArg)
214{
215}
216
217inline bool BasicVersion::operator==(const BasicVersion& arg)const
218{
219 return (this->name == arg.name)
220 && (this->majorVersion == arg.majorVersion)
221 && (this->minorVersion == arg.minorVersion)
222 && (this->patchVersion == arg.patchVersion)
223 && (this->buildVersion == arg.buildVersion);
224}
225
226inline bool BasicVersion::operator!=(const BasicVersion& arg)const
227{
228 return !(*this == arg);
229}
230
231inline bool BasicVersion::operator>(const BasicVersion& arg)const
232{
233 bool result = false;
234
235 if (this->majorVersion > arg.majorVersion)
236 {
237 result = true;
238 }
239 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion > arg.minorVersion))
240 {
241 result = true;
242 }
243 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion > arg.patchVersion))
244 {
245 result = true;
246 }
247 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion == arg.patchVersion) && (this->buildVersion > arg.buildVersion))
248 {
249 result = true;
250 }
251
252 return result;
253}
254
255inline bool BasicVersion::operator<(const BasicVersion& arg)const
256{
257 bool result = false;
258
259 if (this->majorVersion < arg.majorVersion)
260 {
261 result = true;
262 }
263 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion < arg.minorVersion))
264 {
265 result = true;
266 }
267 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion < arg.patchVersion))
268 {
269 result = true;
270 }
271 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion == arg.patchVersion) && (this->buildVersion < arg.buildVersion))
272 {
273 result = true;
274 }
275
276 return result;
277}
278
279inline bool BasicVersion::operator>=(const BasicVersion& arg)const
280{
281 bool result = false;
282
283 if ((*this > arg) || (*this == arg))
284 {
285 result = true;
286 }
287
288 return result;
289}
290
291inline bool BasicVersion::operator<=(const BasicVersion& arg)const
292{
293 bool result = false;
294
295 if ((*this < arg) || (*this == arg))
296 {
297 result = true;
298 }
299
300 return result;
301}
302
303inline BasicVersion::String BasicVersion::GetName()const
304{
305 return this->name;
306}
307
308inline uint8 BasicVersion::GetMajor()const
309{
310 return this->majorVersion;
311}
312
313inline uint8 BasicVersion::GetMinor()const
314{
315 return this->minorVersion;
316}
317
318inline uint8 BasicVersion::GetPatch()const
319{
320 return this->patchVersion;
321}
322
323inline uint32 BasicVersion::GetBuild()const
324{
325 return this->buildVersion;
326}
327
328inline BasicVersion::String BasicVersion::GetState()const
329{
330 return this->state;
331}
332
333} // end of namespace Arp
334
335#endif // ndef ARP_USE_ARP_SYSTEM_CORE
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:33
std::uint8_t uint8
The Arp unsigned integer type of 1 byte size.
Definition: PrimitiveTypes.hpp:25
Root namespace for the PLCnext API