summaryrefslogtreecommitdiffstats
path: root/Source/cmTargetDepend.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2010-08-25 14:07:25 (GMT)
committerBrad King <brad.king@kitware.com>2010-11-18 15:51:00 (GMT)
commit605f4bc0978fd3c84bc06875aef500e62b0f41c7 (patch)
treefd4441fc3b796ecd84d554fd79a45ee464bc9287 /Source/cmTargetDepend.h
parent82596fcffcdf3e536fb0def67f6d4d1d1a3e5207 (diff)
downloadCMake-605f4bc0978fd3c84bc06875aef500e62b0f41c7.zip
CMake-605f4bc0978fd3c84bc06875aef500e62b0f41c7.tar.gz
CMake-605f4bc0978fd3c84bc06875aef500e62b0f41c7.tar.bz2
Record edge type in global dependency graph
Each inter-target dependency may be a 'link' or 'util' dependency.
Diffstat (limited to 'Source/cmTargetDepend.h')
-rw-r--r--Source/cmTargetDepend.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/Source/cmTargetDepend.h b/Source/cmTargetDepend.h
new file mode 100644
index 0000000..258bacd
--- /dev/null
+++ b/Source/cmTargetDepend.h
@@ -0,0 +1,48 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2010 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#ifndef cmTargetDepend_h
+#define cmTargetDepend_h
+
+#include "cmStandardIncludes.h"
+
+class cmTarget;
+
+/** One edge in the global target dependency graph.
+ It may be marked as a 'link' or 'util' edge or both. */
+class cmTargetDepend
+{
+ cmTarget* Target;
+
+ // The set order depends only on the Target, so we use
+ // mutable members to acheive a map with set syntax.
+ mutable bool Link;
+ mutable bool Util;
+public:
+ cmTargetDepend(cmTarget* t): Target(t), Link(false), Util(false) {}
+ operator cmTarget*() const { return this->Target; }
+ cmTarget* operator->() const { return this->Target; }
+ cmTarget& operator*() const { return *this->Target; }
+ friend bool operator < (cmTargetDepend const& l, cmTargetDepend const& 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