From 41de1ab904eaddffb2de17b1de8ef41e462daabe Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Thu, 14 Jul 2016 17:01:33 +0200 Subject: [PATCH] Cpp: Add EngineInfo::Version class * lang/cpp/src/engineinfo.cpp (EngineInfo::engineVersion): New. * lang/cpp/src/engineinfo.h (EngineInfo::engineVersion): Declare. (EngineInfo::Version): Small helper to work with versions. --- lang/cpp/src/engineinfo.cpp | 5 ++++ lang/cpp/src/engineinfo.h | 56 +++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/lang/cpp/src/engineinfo.cpp b/lang/cpp/src/engineinfo.cpp index d2600909..c3b3e046 100644 --- a/lang/cpp/src/engineinfo.cpp +++ b/lang/cpp/src/engineinfo.cpp @@ -72,6 +72,11 @@ const char *GpgME::EngineInfo::version() const return isNull() ? 0 : d->info->version; } +GpgME::EngineInfo::Version GpgME::EngineInfo::engineVersion() const +{ + return Version(version()); +} + const char *GpgME::EngineInfo::requiredVersion() const { return isNull() ? 0 : d->info->req_version; diff --git a/lang/cpp/src/engineinfo.h b/lang/cpp/src/engineinfo.h index 4de9884f..72e125c3 100644 --- a/lang/cpp/src/engineinfo.h +++ b/lang/cpp/src/engineinfo.h @@ -28,6 +28,8 @@ #include #include +#include +#include namespace GpgME { @@ -35,6 +37,59 @@ namespace GpgME class GPGMEPP_EXPORT EngineInfo { public: + struct Version + { + int major, minor, patch; + + Version(const std::string& version) + { + if (version.empty() || + std::sscanf(version.c_str(), "%d.%d.%d", &major, &minor, &patch) != 3) { + major = 0; + minor = 0; + patch = 0; + } + } + + bool operator < (const Version& other) + { + if (major < other.major) + return true; + if (minor < other.minor) + return true; + if (patch < other.patch) + return true; + return false; + } + + bool operator < (const char* other) + { + return operator<(Version(other)); + } + + bool operator == (const Version& other) + { + return major == other.major + && minor == other.minor + && patch == other.patch; + } + + bool operator == (const char* other) + { + return operator==(Version(other)); + } + + friend std::ostream& operator << (std::ostream& stream, const Version& ver) + { + stream << ver.major; + stream << '.'; + stream << ver.minor; + stream << '.'; + stream << ver.patch; + return stream; + } + }; + EngineInfo(); explicit EngineInfo(gpgme_engine_info_t engine); @@ -55,6 +110,7 @@ public: Protocol protocol() const; const char *fileName() const; const char *version() const; + Version engineVersion() const; const char *requiredVersion() const; const char *homeDirectory() const;