LicenseSpring C++ SDK
Easily add Software Licensing to your application
Version.h
Go to the documentation of this file.
1#ifndef LS_VERSION_H
2#define LS_VERSION_H
3
4#ifdef _MSC_VER
5#pragma once
6#pragma warning(push)
7#pragma warning(disable : 4251)
8#endif
9
10#include <string>
11#include "APIDef.h"
12
13namespace LicenseSpring
14{
20{
21public:
22 static constexpr int INVALID_VERSION_NUMBER = -1;
23
25 VersionBase(int major, int minor, char delimeter = '.');
26 virtual ~VersionBase() = default;
27
28 int majorVersion() const { return m_major; }
29 int minorVersion() const { return m_minor; }
30
31 char delimeter() const { return m_delimeter; }
32 void setDelimeter(char delimeter) { m_delimeter = delimeter; }
33
34 size_t size() const;
35 virtual size_t length() const;
36
37 virtual std::string toString() const;
38
39 operator std::string() const;
40
41 bool operator==(const VersionBase &version) const;
42 bool operator!=(const VersionBase &version) const;
43 bool operator<(const VersionBase &version) const;
44 bool operator>(const VersionBase &version) const;
45 bool operator<=(const VersionBase &version) const;
46 bool operator>=(const VersionBase &version) const;
47
48 virtual int compare(const VersionBase &version) const;
49
50 static int compare(const VersionBase &left, const VersionBase &right);
51
52protected:
56};
57
58LS_API std::ostream &operator<<(std::ostream &out, const VersionBase &version);
59
67{
68public:
70 Version(int major, int minor, char delimeter = '.');
71 Version(int major, int minor, int patch, char delimeter = '.');
72 Version(int major, int minor, int patch, int build, char delimeter = '.');
73 Version(const std::string &version, char delimeter = '.');
74
75 int patchVersion() const { return m_patch; }
76 int buildVersion() const { return m_build; }
77 bool hasPatchVersion() const { return m_patch >= 0; }
78 bool hasBuildVersion() const { return m_build >= 0; }
79 void setPatchVersion(int number);
80 void setBuildVersion(int number);
81
82 size_t length() const override;
83
84 std::string toString() const override;
85
86 int compare(const VersionBase &baseVer) const override;
87
88 static Version fromString(const std::string &input, char delimeter = '.');
89
90 static Version InvalidVersion; //< Invalid Version 0.0.-1.-1
91
92protected:
95};
96
104{
105public:
107 MSVersion(int major, int minor, char delimeter = '.');
108 MSVersion(int major, int minor, int build, char delimeter = '.');
109 MSVersion(int major, int minor, int build, int revision, char delimeter = '.');
110 MSVersion(const std::string &version, char delimeter = '.');
111
112 int buildVersion() const { return m_build; }
113 int revisionVersion() const { return m_revision; }
114 bool hasBuildVersion() const { return m_build >= 0; }
115 bool hasRevisionVersion() const { return m_revision >= 0; }
116 void setBuildVersion(int number);
117 void setRevisionVersion(int number);
118
119 size_t length() const override;
120
121 std::string toString() const override;
122
123 int compare(const VersionBase &baseVer) const override;
124
125 static MSVersion fromString(const std::string &input, char delimeter = '.');
126
127 static MSVersion InvalidVersion; //< Invalid Version 0.0.-1.-1
128
129private:
130 int m_build;
131 int m_revision;
132};
133
134enum class PrereleaseType : std::uint8_t
135{
136 alpha = 0,
137 beta = 1,
138 rc = 2,
139 none = 3,
140};
141
148{
149public:
151 VersionEx(int major, int minor, int patch, char delimeter = '.');
152 VersionEx(int major, int minor, int patch, int build, char delimeter = '.');
153 VersionEx(const std::string &version, char delimeter = '.');
154
155 void setPrereleaseType(PrereleaseType type) { m_prereleaseType = type; }
156 PrereleaseType prereleaseType() const { return m_prereleaseType; }
157 bool isPrerelease() const { return !m_prerelease.empty(); }
158
159 const std::string &prereleaseVersion() const { return m_prerelease; }
160 void setPrereleaseVersion(const std::string &version) { m_prerelease = version; }
161
162 const std::string &buildMetadata() const { return m_buildMetadata; }
163 void setBuildMetadata(const std::string &data) { m_buildMetadata = data; }
164
165 std::string toString() const override;
166
167 int compare(const VersionBase &baseVer) const override;
168
169 static VersionEx fromString(const std::string &input, char delimeter = '.');
170
171private:
172 PrereleaseType m_prereleaseType;
173 std::string m_prerelease;
174 std::string m_buildMetadata;
175};
176
177} // namespace LicenseSpring
178
179#ifdef _MSC_VER
180#pragma warning(pop)
181#endif
182
183#endif // LS_CUSTOMER_H
#define LS_API
Definition: APIDef.h:23
Simple class for handling app versions in Microsoft specific file and assembly version format....
Definition: Version.h:104
size_t length() const override
MSVersion(int major, int minor, char delimeter='.')
int buildVersion() const
Definition: Version.h:112
int revisionVersion() const
Definition: Version.h:113
static MSVersion fromString(const std::string &input, char delimeter='.')
bool hasRevisionVersion() const
Definition: Version.h:115
bool hasBuildVersion() const
Definition: Version.h:114
std::string toString() const override
MSVersion(int major, int minor, int build, char delimeter='.')
MSVersion(const std::string &version, char delimeter='.')
void setBuildVersion(int number)
void setRevisionVersion(int number)
int compare(const VersionBase &baseVer) const override
MSVersion(int major, int minor, int build, int revision, char delimeter='.')
static MSVersion InvalidVersion
Definition: Version.h:127
Base class for handling app versions. Contains common functionality for version classes hierarchy.
Definition: Version.h:20
int minorVersion() const
Definition: Version.h:29
bool operator==(const VersionBase &version) const
virtual size_t length() const
int majorVersion() const
Definition: Version.h:28
virtual int compare(const VersionBase &version) const
char delimeter() const
Definition: Version.h:31
bool operator<=(const VersionBase &version) const
static int compare(const VersionBase &left, const VersionBase &right)
bool operator>(const VersionBase &version) const
VersionBase(int major, int minor, char delimeter='.')
void setDelimeter(char delimeter)
Definition: Version.h:32
bool operator<(const VersionBase &version) const
bool operator>=(const VersionBase &version) const
virtual std::string toString() const
bool operator!=(const VersionBase &version) const
virtual ~VersionBase()=default
Extended class for handling app versions, compliant with Semantic Versioning 2.0.0 Format: Major....
Definition: Version.h:148
VersionEx(const std::string &version, char delimeter='.')
std::string toString() const override
VersionEx(int major, int minor, int patch, char delimeter='.')
PrereleaseType prereleaseType() const
Definition: Version.h:156
void setBuildMetadata(const std::string &data)
Definition: Version.h:163
void setPrereleaseVersion(const std::string &version)
Definition: Version.h:160
int compare(const VersionBase &baseVer) const override
bool isPrerelease() const
Definition: Version.h:157
const std::string & buildMetadata() const
Definition: Version.h:162
const std::string & prereleaseVersion() const
Definition: Version.h:159
static VersionEx fromString(const std::string &input, char delimeter='.')
VersionEx(int major, int minor, int patch, int build, char delimeter='.')
void setPrereleaseType(PrereleaseType type)
Definition: Version.h:155
Simple class for handling app versions. Format: Major.Minor.Patch.Build, where all parts are integer ...
Definition: Version.h:67
bool hasPatchVersion() const
Definition: Version.h:77
static Version fromString(const std::string &input, char delimeter='.')
void setPatchVersion(int number)
size_t length() const override
Version(const std::string &version, char delimeter='.')
Version(int major, int minor, char delimeter='.')
int compare(const VersionBase &baseVer) const override
bool hasBuildVersion() const
Definition: Version.h:78
int buildVersion() const
Definition: Version.h:76
std::string toString() const override
void setBuildVersion(int number)
static Version InvalidVersion
Definition: Version.h:90
Version(int major, int minor, int patch, char delimeter='.')
Version(int major, int minor, int patch, int build, char delimeter='.')
int patchVersion() const
Definition: Version.h:75
LS_API std::ostream & operator<<(std::ostream &out, const VersionBase &version)