PLCnext API Documentation  22.9.0.33
BasicVersion.hpp
1 //
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 
13 namespace Arp
14 {
15 
35 {
36 public: // typedefs
39 
40 public: // 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 
92 public: // static factory operations
97  static BasicVersion Parse(const String& input);
98 
103  static bool TryParse(const String& input, BasicVersion& result);
104 
105 public: // 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 
131 public: // 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 
156 public: // operations
159  String ToString(void) const;
160 
161 private: // static methods
162  static bool TryParseFullVersion(const String& input, BasicVersion& result);
163  static bool TryParseInternalVersion(const String& input, BasicVersion& result);
164 
165 private: // 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 
177 inline 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 
182 inline 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 
187 inline 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 
192 inline 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 
197 inline 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 
206 inline 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 
230 inline 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 
254 inline 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 
266 inline 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::uint8_t uint8
The Arp unsigned integer type of 1 byte size.
Definition: PrimitiveTypes.hpp:27
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
Root namespace for the PLCnext API