aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Analysis/PathSensitive/ExplodedGraph.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Analysis/PathSensitive/ExplodedGraph.h')
-rw-r--r--include/clang/Analysis/PathSensitive/ExplodedGraph.h34
1 files changed, 33 insertions, 1 deletions
diff --git a/include/clang/Analysis/PathSensitive/ExplodedGraph.h b/include/clang/Analysis/PathSensitive/ExplodedGraph.h
index db5f692699..a3d1bfe82e 100644
--- a/include/clang/Analysis/PathSensitive/ExplodedGraph.h
+++ b/include/clang/Analysis/PathSensitive/ExplodedGraph.h
@@ -18,7 +18,7 @@
#include "clang/Analysis/ProgramPoint.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/FoldingSet.h"
-#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/Support/Allocator.h"
#include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/GraphTraits.h"
@@ -376,6 +376,38 @@ public:
}
};
+
+template <typename NodeTy>
+class ExplodedNodeSet {
+
+ typedef llvm::SmallPtrSet<NodeTy*,5> ImplTy;
+ ImplTy Impl;
+
+public:
+ ExplodedNodeSet(NodeTy* N) {
+ assert (N && !static_cast<ExplodedNodeImpl*>(N)->isSink());
+ Impl.insert(N);
+ }
+
+ ExplodedNodeSet() {}
+
+ inline void Add(NodeTy* N) {
+ if (N && !static_cast<ExplodedNodeImpl*>(N)->isSink()) Impl.insert(N);
+ }
+
+ typedef typename ImplTy::iterator iterator;
+ typedef typename ImplTy::const_iterator const_iterator;
+
+ inline unsigned size() const { return Impl.size(); }
+ inline bool empty() const { return Impl.empty(); }
+
+ inline iterator begin() { return Impl.begin(); }
+ inline iterator end() { return Impl.end(); }
+
+ inline const_iterator begin() const { return Impl.begin(); }
+ inline const_iterator end() const { return Impl.end(); }
+};
+
} // end clang namespace
// GraphTraits