diff --git a/hoot-core/src/main/cpp/hoot/core/elements/Tags.cpp b/hoot-core/src/main/cpp/hoot/core/elements/Tags.cpp
index 32fe790..3f422b1 100644
--- a/hoot-core/src/main/cpp/hoot/core/elements/Tags.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/elements/Tags.cpp
@@ -22,7 +22,7 @@
* This will properly maintain the copyright information. DigitalGlobe
* copyrights will be updated automatically.
*
- * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
*/
#include "Tags.h"
@@ -775,7 +775,6 @@ QStringList Tags::split(const QString& values)
QString Tags::toString() const
{
QString result;
-
for (Tags::const_iterator it = constBegin(); it != constEnd(); ++it)
{
result += it.key() + " = " + it.value() + "\n";
@@ -798,6 +797,11 @@ void Tags::_valueRegexParser(const QString& str, QString& num, QString& units) c
units = copyStr.replace(sRegExp, QString("")).trimmed();
}
+bool Tags::hasKvp(const QString& kvp) const
+{
+ return hasAnyKvp(QStringList(kvp));
+}
+
bool Tags::hasAnyKvp(const QStringList& kvps) const
{
for (int i = 0; i < kvps.size(); i++)
@@ -826,6 +830,16 @@ bool Tags::hasAnyKvp(const QStringList& kvps) const
return false;
}
+QStringList Tags::toKvps() const
+{
+ QStringList kvps;
+ for (Tags::const_iterator it = constBegin(); it != constEnd(); ++it)
+ {
+ kvps.append(it.key() + "=" + it.value());
+ }
+ return kvps;
+}
+
bool Tags::hasAnyKey(const QStringList& keys)
{
for (int i = 0; i < keys.size(); i++)
@@ -870,6 +884,30 @@ Tags Tags::schemaVerticesToTags(const std::vector<SchemaVertex>& schemaVertices)
return tags;
}
+bool Tags::intersects(const Tags& other) const
+{
+ for (Tags::const_iterator tagItr = other.begin(); tagItr != other.end(); ++tagItr)
+ {
+ if (get(tagItr.key()) == other.get(tagItr.key()))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool Tags::bothContainKvp(const Tags& tags1, const Tags& tags2, const QString& kvp)
+{
+ return tags1.hasKvp(kvp) && tags2.hasKvp(kvp);
+}
+
+bool Tags::onlyOneContainsKvp(const Tags& tags1, const Tags& tags2, const QString& kvp)
+{
+ const bool firstHasKvp = tags1.hasKvp(kvp);
+ const bool secondHasKvp = tags2.hasKvp(kvp);
+ return (!firstHasKvp && secondHasKvp) || (firstHasKvp && !secondHasKvp);
+}
+
QString Tags::getDiffString(const Tags& other) const
{
if (this->operator ==(other))