mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
cmListFileCache: Add wrapper template for values with a backtrace
This commit is contained in:
@@ -9,10 +9,10 @@
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmake.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <assert.h>
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <utility>
|
||||
|
||||
cmCommandContext::cmCommandName& cmCommandContext::cmCommandName::operator=(
|
||||
std::string const& name)
|
||||
@@ -474,3 +474,8 @@ bool operator!=(const cmListFileContext& lhs, const cmListFileContext& rhs)
|
||||
{
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, BT<std::string> const& s)
|
||||
{
|
||||
return os << s.Value;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <memory> // IWYU pragma: keep
|
||||
#include <stddef.h>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "cmStateSnapshot.h"
|
||||
@@ -169,6 +170,34 @@ private:
|
||||
cmListFileBacktrace(std::shared_ptr<Entry const> top);
|
||||
};
|
||||
|
||||
// Wrap type T as a value with a backtrace. For purposes of
|
||||
// ordering and equality comparison, only the original value is
|
||||
// used. The backtrace is considered incidental.
|
||||
template <typename T>
|
||||
class BT
|
||||
{
|
||||
public:
|
||||
BT(T v = T(), cmListFileBacktrace bt = cmListFileBacktrace())
|
||||
: Value(std::move(v))
|
||||
, Backtrace(std::move(bt))
|
||||
{
|
||||
}
|
||||
T Value;
|
||||
cmListFileBacktrace Backtrace;
|
||||
friend bool operator==(BT<T> const& l, BT<T> const& r)
|
||||
{
|
||||
return l.Value == r.Value;
|
||||
}
|
||||
friend bool operator<(BT<T> const& l, BT<T> const& r)
|
||||
{
|
||||
return l.Value < r.Value;
|
||||
}
|
||||
friend bool operator==(BT<T> const& l, T const& r) { return l.Value == r; }
|
||||
friend bool operator==(T const& l, BT<T> const& r) { return l == r.Value; }
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, BT<std::string> const& s);
|
||||
|
||||
struct cmListFile
|
||||
{
|
||||
bool ParseFile(const char* path, cmMessenger* messenger,
|
||||
|
||||
Reference in New Issue
Block a user