]> granicus.if.org Git - clang/commitdiff
Added iterator mechanism to iterator over the decls and expressions
authorTed Kremenek <kremenek@apple.com>
Fri, 28 Sep 2007 17:55:22 +0000 (17:55 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 28 Sep 2007 17:55:22 +0000 (17:55 +0000)
tracked by an ExprDeclBitVector analysis.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42437 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/ExprDeclBitVector.h

index 9a79bbe0b245f1140182dffd994b4779cfe1f67a..d1cdc037620bb9d6e4977e8a3214897118ed0caa 100644 (file)
@@ -32,9 +32,13 @@ struct ExprDeclBitVector_Types {
   //===--------------------------------------------------------------------===//
 
   class AnalysisDataTy {
+  public:
     typedef llvm::DenseMap<const ScopedDecl*, unsigned > DMapTy;
-    typedef llvm::DenseMap<const Expr*, unsigned > EMapTy;
+    typedef llvm::DenseMap<const Expr*, unsigned > EMapTy;    
+    typedef DMapTy::const_iterator decl_iterator;
+    typedef EMapTy::const_iterator expr_iterator;
 
+  protected:
     EMapTy EMap;
     DMapTy DMap;    
     unsigned NDecls;
@@ -70,6 +74,11 @@ struct ExprDeclBitVector_Types {
     void Register(const Expr* E) {
       if (!isTracked(E)) EMap[E] = NExprs++;
     }
+    
+    decl_iterator begin_decl() const { return DMap.begin(); }
+    decl_iterator end_decl() const { return DMap.end(); }
+    expr_iterator begin_expr() const { return EMap.begin(); }
+    expr_iterator end_expr() const { return EMap.end(); }
   };
 
   //===--------------------------------------------------------------------===//
@@ -116,6 +125,16 @@ struct ExprDeclBitVector_Types {
       return const_cast<ValTy&>(*this)(E,AD);
     }
     
+    llvm::BitVector::reference getDeclBit(unsigned i) { return DeclBV[i]; }    
+    const llvm::BitVector::reference getDeclBit(unsigned i) const {
+      return const_cast<llvm::BitVector&>(DeclBV)[i];
+    }
+    
+    llvm::BitVector::reference getExprBit(unsigned i) { return ExprBV[i]; }    
+    const llvm::BitVector::reference getExprBit(unsigned i) const {
+      return const_cast<llvm::BitVector&>(ExprBV)[i];
+    }
+    
     ValTy& operator|=(const ValTy& RHS) {
       assert (sizesEqual(RHS));
       DeclBV |= RHS.DeclBV;