Skip to content

v0.2.53..v0.2.54 changeset Tags.cpp

Garret Voltz edited this page Mar 31, 2020 · 1 revision
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))
Clone this wiki locally