summaryrefslogtreecommitdiffstats
path: root/Source/cmTargetDepend.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmTargetDepend.h')
-rw-r--r--Source/cmTargetDepend.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/Source/cmTargetDepend.h b/Source/cmTargetDepend.h
new file mode 100644
index 0000000..b698db6
--- /dev/null
+++ b/Source/cmTargetDepend.h
@@ -0,0 +1,54 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#ifndef cmTargetDepend_h
+#define cmTargetDepend_h
+
+#include "cmConfigure.h" // IWYU pragma: keep
+
+#include <set>
+
+class cmGeneratorTarget;
+
+/** One edge in the global target dependency graph.
+ It may be marked as a 'link' or 'util' edge or both. */
+class cmTargetDepend
+{
+ cmGeneratorTarget const* Target;
+
+ // The set order depends only on the Target, so we use
+ // mutable members to achieve a map with set syntax.
+ mutable bool Link;
+ mutable bool Util;
+
+public:
+ cmTargetDepend(cmGeneratorTarget const* t)
+ : Target(t)
+ , Link(false)
+ , Util(false)
+ {
+ }
+ operator cmGeneratorTarget const*() const { return this->Target; }
+ cmGeneratorTarget const* operator->() const { return this->Target; }
+ cmGeneratorTarget const& operator*() const { return *this->Target; }
+ friend bool operator<(cmTargetDepend l, cmTargetDepend r)
+ {
+ return l.Target < r.Target;
+ }
+ void SetType(bool strong) const
+ {
+ if (strong) {
+ this->Util = true;
+ } else {
+ this->Link = true;
+ }
+ }
+ bool IsLink() const { return this->Link; }
+ bool IsUtil() const { return this->Util; }
+};
+
+/** Unordered set of (direct) dependencies of a target. */
+class cmTargetDependSet : public std::set<cmTargetDepend>
+{
+};
+
+#endif