diff options
Diffstat (limited to 'Source/cmTargetDepend.h')
-rw-r--r-- | Source/cmTargetDepend.h | 54 |
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 |