Bladeren bron

Add BTs helper to support multiple backtraces

Justin Goshi 5 jaren geleden
bovenliggende
commit
cc96fb617b
1 gewijzigde bestanden met toevoegingen van 26 en 0 verwijderingen
  1. 26 0
      Source/cmListFileCache.h

+ 26 - 0
Source/cmListFileCache.h

@@ -175,6 +175,32 @@ public:
 
 std::ostream& operator<<(std::ostream& os, BT<std::string> const& s);
 
+// Wrap type T as a value with potentially multiple backtraces.  For purposes
+// of ordering and equality comparison, only the original value is used.  The
+// backtrace is considered incidental.
+template <typename T>
+class BTs
+{
+public:
+  BTs(T v = T(), cmListFileBacktrace bt = cmListFileBacktrace())
+    : Value(std::move(v))
+  {
+    Backtraces.emplace_back(std::move(bt));
+  }
+  T Value;
+  std::vector<cmListFileBacktrace> Backtraces;
+  friend bool operator==(BTs<T> const& l, BTs<T> const& r)
+  {
+    return l.Value == r.Value;
+  }
+  friend bool operator<(BTs<T> const& l, BTs<T> const& r)
+  {
+    return l.Value < r.Value;
+  }
+  friend bool operator==(BTs<T> const& l, T const& r) { return l.Value == r; }
+  friend bool operator==(T const& l, BTs<T> const& r) { return l == r.Value; }
+};
+
 std::vector<BT<std::string>> ExpandListWithBacktrace(
   std::string const& list,
   cmListFileBacktrace const& bt = cmListFileBacktrace());