7 #ifndef IFM3D_DEVICE_SEMVER_H
8 #define IFM3D_DEVICE_SEMVER_H
13 #include <ifm3d/device/module_device.h>
23 const std::optional<std::string> prerelease = std::nullopt,
24 const std::optional<std::string> build_meta = std::nullopt)
28 prerelease(prerelease),
29 build_meta(build_meta)
33 const size_t major_num;
34 const size_t minor_num;
35 const size_t patch_num;
36 const std::optional<std::string> prerelease;
37 const std::optional<std::string> build_meta;
40 operator<(
const SemVer& rhs)
const
44 return major_num < rhs.major_num ||
45 (major_num == rhs.major_num &&
46 (minor_num < rhs.minor_num ||
47 (minor_num == rhs.minor_num && (patch_num < rhs.patch_num))));
51 operator==(
const SemVer& rhs)
const
53 return ((major_num == rhs.major_num) && (minor_num == rhs.minor_num) &&
54 (patch_num == rhs.patch_num) && (prerelease == rhs.prerelease) &&
55 (build_meta == rhs.build_meta));
59 operator!=(
const SemVer& rhs)
const
61 return !(*
this == rhs);
65 operator>=(
const SemVer& rhs)
const
67 return !(*
this < rhs);
71 operator>(
const SemVer& rhs)
const
77 operator<=(
const SemVer& rhs)
const
79 return !(rhs < *
this);
84 operator<<(std::ostream& os,
const SemVer& version)
86 os << version.major_num <<
'.' << version.minor_num <<
'.'
89 if (version.prerelease.has_value())
91 os <<
'-' << version.prerelease.value();
94 if (version.build_meta.has_value())
96 os <<
'+' << version.build_meta.value();
102 static std::optional<SemVer> Parse(
const std::string& version_string);
106 #endif // IFM3D_DEVICE_SEMVER_H