PLCnext API Documentation 23.3.0.32
BasicVersion.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
7#include "Arp/System/Core/BasicString.hxx"
8
9#ifndef ARP_INSIDE_ARP_H
10 #error Never include 'BasicVersion.hxx' directly, just include 'Arp.h'
11#endif
12
13namespace Arp
14{
15
35{
36public: // typedefs
39
40public: // construction/destruction
42 BasicVersion(void) = default;
43
49 BasicVersion(uint8 majorVersion, const String& state = String(), const String& name = String());
50
57 BasicVersion(uint8 majorVersion, uint8 minorVersion, const String& state = String(), const String& name = String());
58
65 BasicVersion(uint8 majorVersion, uint8 minorVersion, uint8 patchVersion, const String& state = String(), const String& name = String());
66
74 BasicVersion(uint8 majorVersion, uint8 minorVersion, uint8 patchVersion, uint32 buildVersion, const String& state = String(), const String& name = String());
75
78 BasicVersion(const BasicVersion& arg) = default;
79
82 BasicVersion(BasicVersion&& arg) = default;
83
87 BasicVersion& operator=(const BasicVersion& arg) = default;
88
90 virtual ~BasicVersion(void) = default; // TODO(OR): remove virtual here
91
92public: // static factory operations
97 static BasicVersion Parse(const String& input);
98
103 static bool TryParse(const String& input, BasicVersion& result);
104
105public: // compare operators
109 bool operator==(const BasicVersion& arg)const;
110
114 bool operator>(const BasicVersion& arg)const;
115
119 bool operator<(const BasicVersion& arg)const;
120
124 bool operator>=(const BasicVersion& arg)const;
125
129 bool operator<=(const BasicVersion& arg)const;
130
131public: // setter/getter operations
134 String GetName(void)const;
135
138 uint8 GetMajor(void)const;
139
142 uint8 GetMinor(void)const;
143
146 uint8 GetPatch(void)const;
147
150 uint32 GetBuild(void)const;
151
154 String GetState(void)const;
155
156public: // operations
159 String ToString(void) const;
160
161private: // static methods
162 static bool TryParseFullVersion(const String& input, BasicVersion& result);
163 static bool TryParseInternalVersion(const String& input, BasicVersion& result);
164
165private: // fields
166 String name;
167 uint8 majorVersion = 0;
168 uint8 minorVersion = 0;
169 uint8 patchVersion = 0;
170 uint32 buildVersion = 0;
171 String state;
172};
173
175// inline methods of class BasicVersion
176
177inline BasicVersion::BasicVersion(uint8 majorVersionArg, const String& stateArg, const String& nameArg)
178 : name(nameArg), majorVersion(majorVersionArg), minorVersion(0), patchVersion(0), buildVersion(0), state(stateArg)
179{
180}
181
182inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, const String& stateArg, const String& nameArg)
183 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(0), buildVersion(0), state(stateArg)
184{
185}
186
187inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, uint8 patchVersionArg, const String& stateArg, const String& nameArg)
188 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(patchVersionArg), buildVersion(0), state(stateArg)
189{
190}
191
192inline BasicVersion::BasicVersion(uint8 majorVersionArg, uint8 minorVersionArg, uint8 patchVersionArg, uint32 buildVersionArg, const String& stateArg, const String& nameArg)
193 : name(nameArg), majorVersion(majorVersionArg), minorVersion(minorVersionArg), patchVersion(patchVersionArg), buildVersion(buildVersionArg), state(stateArg)
194{
195}
196
197inline bool BasicVersion::operator==(const BasicVersion& arg)const
198{
199 return (this->name == arg.name)
200 && (this->majorVersion == arg.majorVersion)
201 && (this->minorVersion == arg.minorVersion)
202 && (this->patchVersion == arg.patchVersion)
203 && (this->buildVersion == arg.buildVersion);
204}
205
206inline bool BasicVersion::operator>(const BasicVersion& arg)const
207{
208 bool result = false;
209
210 if (this->majorVersion > arg.majorVersion)
211 {
212 result = true;
213 }
214 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion > arg.minorVersion))
215 {
216 result = true;
217 }
218 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion > arg.patchVersion))
219 {
220 result = true;
221 }
222 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion == arg.patchVersion) && (this->buildVersion > arg.buildVersion))
223 {
224 result = true;
225 }
226
227 return result;
228}
229
230inline bool BasicVersion::operator<(const BasicVersion& arg)const
231{
232 bool result = false;
233
234 if (this->majorVersion < arg.majorVersion)
235 {
236 result = true;
237 }
238 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion < arg.minorVersion))
239 {
240 result = true;
241 }
242 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion < arg.patchVersion))
243 {
244 result = true;
245 }
246 else if ((this->majorVersion == arg.majorVersion) && (this->minorVersion == arg.minorVersion) && (this->patchVersion == arg.patchVersion) && (this->buildVersion < arg.buildVersion))
247 {
248 result = true;
249 }
250
251 return result;
252}
253
254inline bool BasicVersion::operator>=(const BasicVersion& arg)const
255{
256 bool result = false;
257
258 if ((*this > arg) || (*this == arg))
259 {
260 result = true;
261 }
262
263 return result;
264}
265
266inline bool BasicVersion::operator<=(const BasicVersion& arg)const
267{
268 bool result = false;
269
270 if ((*this < arg) || (*this == arg))
271 {
272 result = true;
273 }
274
275 return result;
276}
277
279{
280 return this->name;
281}
282
284{
285 return this->majorVersion;
286}
287
289{
290 return this->minorVersion;
291}
292
294{
295 return this->patchVersion;
296}
297
299{
300 return this->buildVersion;
301}
302
304{
305 return this->state;
306}
307
308} // end of namespace Arp
This class represents the version of a special SDK or Arp build.
Definition: BasicVersion.hpp:35
String GetState(void) const
Gets the state of this version.
Definition: BasicVersion.hpp:303
BasicVersion(BasicVersion &&arg)=default
The default move constructor
String GetName(void) const
Gets the name of this released version.
Definition: BasicVersion.hpp:278
static bool TryParse(const String &input, BasicVersion &result)
Tries to parse the given input string and to create a new version from it.
bool operator==(const BasicVersion &arg) const
Compares this instance to the given argument on equality
Definition: BasicVersion.hpp:197
static BasicVersion Parse(const String &input)
Parses the given input string and creates a new version from it.
bool operator>(const BasicVersion &arg) const
Compares this instance to the given argument.
Definition: BasicVersion.hpp:206
BasicVersion & operator=(const BasicVersion &arg)=default
The default assignment operator.
BasicString< char > String
Definition: BasicVersion.hpp:38
BasicVersion(const BasicVersion &arg)=default
The default copy constructor.
bool operator<=(const BasicVersion &arg) const
Compares this instance to the given argument.
Definition: BasicVersion.hpp:266
bool operator<(const BasicVersion &arg) const
Compares this instance to the given argument.
Definition: BasicVersion.hpp:230
String ToString(void) const
Converts this version to a string as explained here BasicVersion.
BasicVersion(void)=default
The default constructor constructs an empty and zero'ed version.
uint8 GetMinor(void) const
Gets the minor version.
Definition: BasicVersion.hpp:288
uint8 GetMajor(void) const
Gets the major version.
Definition: BasicVersion.hpp:283
uint8 GetPatch(void) const
Gets the patch version.
Definition: BasicVersion.hpp:293
virtual ~BasicVersion(void)=default
The default destructor.
uint32 GetBuild(void) const
Gets the build version.
Definition: BasicVersion.hpp:298
bool operator>=(const BasicVersion &arg) const
Compares this instance to the given argument.
Definition: BasicVersion.hpp:254
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
std::uint8_t uint8
The Arp unsigned integer type of 1 byte size.
Definition: PrimitiveTypes.hpp:27
Root namespace for the PLCnext API