summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/AddonVersion.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/addons/AddonVersion.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/xbmc/addons/AddonVersion.h b/xbmc/addons/AddonVersion.h
new file mode 100644
index 0000000..78537a5
--- /dev/null
+++ b/xbmc/addons/AddonVersion.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include <string>
+
+namespace ADDON
+{
+/* \brief Addon versioning using the debian versioning scheme
+
+ CAddonVersion uses debian versioning, which means in the each section of the period
+ separated version string, numbers are compared numerically rather than lexicographically,
+ thus any preceding zeros are ignored.
+
+ i.e. 1.00 is considered the same as 1.0, and 1.01 is considered the same as 1.1.
+
+ Further, 1.0 < 1.0.0
+
+ See here for more info: http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
+ */
+class CAddonVersion
+{
+public:
+ explicit CAddonVersion(const char* version = nullptr);
+ explicit CAddonVersion(const std::string& version);
+
+ CAddonVersion(const CAddonVersion& other) = default;
+ CAddonVersion(CAddonVersion&& other) = default;
+ CAddonVersion& operator=(const CAddonVersion& other) = default;
+ CAddonVersion& operator=(CAddonVersion&& other) = default;
+
+ virtual ~CAddonVersion() = default;
+
+ int Epoch() const { return mEpoch; }
+ const std::string& Upstream() const { return mUpstream; }
+ const std::string& Revision() const { return mRevision; }
+
+ bool operator<(const CAddonVersion& other) const;
+ bool operator>(const CAddonVersion& other) const;
+ bool operator<=(const CAddonVersion& other) const;
+ bool operator>=(const CAddonVersion& other) const;
+ bool operator==(const CAddonVersion& other) const;
+ bool operator!=(const CAddonVersion& other) const;
+ std::string asString() const;
+ bool empty() const;
+
+ static bool SplitFileName(std::string& ID, std::string& version, const std::string& filename);
+
+protected:
+ int mEpoch;
+ std::string mUpstream;
+ std::string mRevision;
+
+ static int CompareComponent(const char* a, const char* b);
+};
+} // namespace ADDON