Archived
1
0
This repository has been archived on 2024-10-17. You can view files and clone it, but cannot push or open issues or pull requests.
Files
winamp/Src/external_dependencies/openmpt-trunk/include/asiomodern/include/ASIOModern/ASIOVersion.hpp
2024-09-24 14:54:57 +02:00

133 lines
3.7 KiB
C++
Vendored

#ifndef ASIO_ASIOVERSION_HPP
#define ASIO_ASIOVERSION_HPP
namespace ASIO {
#define ASIO_VERSION_MAJOR 2
#define ASIO_VERSION_MINOR 3
#define ASIO_VERSION_PATCH 3
#define ASIO_VERSION_BUILD 20190614
#define ASIO_MODERNSDK_VERSION_MAJOR 0
#define ASIO_MODERNSDK_VERSION_MINOR 12
#define ASIO_MODERNSDK_VERSION_PATCH 5
#define ASIO_MODERNSDK_VERSION_BUILD 0
#define ASIO_VERSION_BUILD_NAMESPACE_IMPL(a, b, c, d) v##a##_##b##_##c
#define ASIO_VERSION_BUILD_NAMESPACE(a, b, c, d) ASIO_VERSION_BUILD_NAMESPACE_IMPL(a, b, c, d)
#define ASIO_VERSION_NAMESPACE ASIO_VERSION_BUILD_NAMESPACE(ASIO_MODERNSDK_VERSION_MAJOR, ASIO_MODERNSDK_VERSION_MINOR, ASIO_MODERNSDK_VERSION_PATCH, ASIO_MODERNSDK_VERSION_BUILD)
inline namespace Version {
inline namespace ASIO_VERSION_NAMESPACE {
struct SemanticVersion {
unsigned long long Major = 0;
unsigned long long Minor = 0;
unsigned long long Patch = 0;
constexpr std::tuple<unsigned long long, unsigned long long, unsigned long long> as_tuple() const noexcept {
return std::make_tuple(Major, Minor, Patch);
}
};
constexpr bool operator==(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() == b.as_tuple();
}
constexpr bool operator!=(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() != b.as_tuple();
}
constexpr bool operator<(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() < b.as_tuple();
}
constexpr bool operator>(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() > b.as_tuple();
}
constexpr bool operator<=(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() <= b.as_tuple();
}
constexpr bool operator>=(SemanticVersion a, SemanticVersion b) noexcept {
return a.as_tuple() >= b.as_tuple();
}
struct VersionInfo {
SemanticVersion SemVer;
unsigned long long Build = 0;
constexpr std::tuple<std::tuple<unsigned long long, unsigned long long, unsigned long long>, unsigned long long> as_tuple() const noexcept {
return std::make_tuple(SemVer.as_tuple(), Build);
}
template <typename Tostream>
friend Tostream & operator<<(Tostream & os, VersionInfo vi) {
if (vi.Build > 0) {
os << vi.SemVer.Major << "." << vi.SemVer.Minor << "." << vi.SemVer.Patch << "+build." << vi.Build;
} else {
os << vi.SemVer.Major << "." << vi.SemVer.Minor << "." << vi.SemVer.Patch;
}
return os;
}
};
constexpr bool operator==(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() == b.as_tuple();
}
constexpr bool operator!=(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() != b.as_tuple();
}
constexpr bool operator<(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() < b.as_tuple();
}
constexpr bool operator>(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() > b.as_tuple();
}
constexpr bool operator<=(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() <= b.as_tuple();
}
constexpr bool operator>=(VersionInfo a, VersionInfo b) noexcept {
return a.as_tuple() >= b.as_tuple();
}
constexpr inline VersionInfo Version = {
{ASIO_VERSION_MAJOR, ASIO_VERSION_MINOR, ASIO_VERSION_PATCH},
ASIO_VERSION_BUILD
};
constexpr inline VersionInfo ModernSDKVersion = {
{ASIO_MODERNSDK_VERSION_MAJOR, ASIO_MODERNSDK_VERSION_MINOR, ASIO_MODERNSDK_VERSION_PATCH},
ASIO_MODERNSDK_VERSION_BUILD
};
} // namespace ASIO_VERSION_NAMESPACE
} // namespace Version
} // namespace ASIO
#endif // ASIO_ASIOVERSION_HPP