18namespace DataObjects {
23std::string trim(std::string s) {
24 auto not_space = [](
unsigned char c) {
return !std::isspace(c); };
26 s.erase(s.begin(), std::find_if(s.begin(), s.end(), not_space));
27 s.erase(std::find_if(s.rbegin(), s.rend(), not_space).base(), s.end());
56 const std::string &prerelease,
const std::string &build)
57 : m_major(major), m_minor(minor), m_patch(patch), m_prerelease(trim(prerelease)), m_build(trim(build)) {
59 m_version = std::format(
"{}.{}.{}", major, minor, patch);
83 if (
auto cmp = m_major <=> other.m_major; cmp != 0)
86 if (
auto cmp = m_minor <=> other.m_minor; cmp != 0)
89 if (
auto cmp = m_patch <=> other.m_patch; cmp != 0)
93 return m_prerelease <=> other.m_prerelease;
126 throw std::runtime_error(std::format(
"Invalid version: {}", version));
128 std::uint32_t
value = 0;
130 std::string matchStr =
m[1].str();
132 auto [ptr, ec] = std::from_chars(matchStr.data(), matchStr.data() + matchStr.size(),
value);
133 if (ec != std::errc())
134 throw std::runtime_error(std::format(
"Invalid major revision number: {}", matchStr));
139 matchStr =
m[2].str();
141 auto [ptr, ec] = std::from_chars(matchStr.data(), matchStr.data() + matchStr.size(),
value);
142 if (ec != std::errc())
143 throw std::runtime_error(std::format(
"Invalid minor revision number: {}",
m[2].str()));
149 matchStr =
m[3].str();
151 auto [ptr, ec] = std::from_chars(matchStr.data(), matchStr.data() + matchStr.size(),
value);
152 if (ec != std::errc())
153 throw std::runtime_error(std::format(
"Invalid minor revision number: {}",
m[3].str()));
double value
The value of the point.
Implementation of a SemVer parser.
void parse_version(const std::string &)
Check and split the version string into major, minor, patch, etc.
const std::string & getVersion() const
static std::regex version_regex
const std::string & getBuild() const
std::uint32_t getMinor() const
const std::string & getPrerelease() const
std::uint32_t getMajor() const
bool operator==(const SemanticVersion &other) const
Check if two versions are equivalent.
std::uint32_t getPatch() const
std::strong_ordering operator<=>(const SemanticVersion &other) const
Comparison operator.
Helper class which provides the Collimation Length for SANS instruments.