| /* 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 |