From: Ted Kremenek Date: Fri, 28 Sep 2007 17:55:22 +0000 (+0000) Subject: Added iterator mechanism to iterator over the decls and expressions X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb152a7e8718324ef7c2f2f01c18049319078041;p=clang Added iterator mechanism to iterator over the decls and expressions tracked by an ExprDeclBitVector analysis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42437 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/ExprDeclBitVector.h b/include/clang/Analysis/ExprDeclBitVector.h index 9a79bbe0b2..d1cdc03762 100644 --- a/include/clang/Analysis/ExprDeclBitVector.h +++ b/include/clang/Analysis/ExprDeclBitVector.h @@ -32,9 +32,13 @@ struct ExprDeclBitVector_Types { //===--------------------------------------------------------------------===// class AnalysisDataTy { + public: typedef llvm::DenseMap DMapTy; - typedef llvm::DenseMap EMapTy; + typedef llvm::DenseMap 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(*this)(E,AD); } + llvm::BitVector::reference getDeclBit(unsigned i) { return DeclBV[i]; } + const llvm::BitVector::reference getDeclBit(unsigned i) const { + return const_cast(DeclBV)[i]; + } + + llvm::BitVector::reference getExprBit(unsigned i) { return ExprBV[i]; } + const llvm::BitVector::reference getExprBit(unsigned i) const { + return const_cast(ExprBV)[i]; + } + ValTy& operator|=(const ValTy& RHS) { assert (sizesEqual(RHS)); DeclBV |= RHS.DeclBV;