aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2016-07-14 15:01:33 +0000
committerAndre Heinecke <[email protected]>2016-07-14 15:02:38 +0000
commit41de1ab904eaddffb2de17b1de8ef41e462daabe (patch)
treebfcd78597f03440943d15e1e84f28cef37cca0d3
parentQt: Fix usage of ignore-invalid-option in tests (diff)
downloadgpgme-41de1ab904eaddffb2de17b1de8ef41e462daabe.tar.gz
gpgme-41de1ab904eaddffb2de17b1de8ef41e462daabe.zip
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.
-rw-r--r--lang/cpp/src/engineinfo.cpp5
-rw-r--r--lang/cpp/src/engineinfo.h56
2 files changed, 61 insertions, 0 deletions
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 <memory>
#include <algorithm>
+#include <string>
+#include <iostream>
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;