ASTUnresolvedSet.h revision 249423
139833Speter//===-- ASTUnresolvedSet.h - Unresolved sets of declarations ---*- C++ -*-===// 239833Speter// 339833Speter// The LLVM Compiler Infrastructure 439833Speter// 539833Speter// This file is distributed under the University of Illinois Open Source 639833Speter// License. See LICENSE.TXT for details. 739833Speter// 839833Speter//===----------------------------------------------------------------------===// 939833Speter// 1039833Speter// This file provides an UnresolvedSet-like class, whose contents are 1139833Speter// allocated using the allocator associated with an ASTContext. 1239833Speter// 1339833Speter//===----------------------------------------------------------------------===// 1439833Speter 1539833Speter#ifndef LLVM_CLANG_AST_ASTUNRESOLVEDSET_H 1639833Speter#define LLVM_CLANG_AST_ASTUNRESOLVEDSET_H 1739833Speter 1839833Speter#include "clang/AST/ASTVector.h" 1939833Speter#include "clang/AST/UnresolvedSet.h" 2039833Speter 2139833Speternamespace clang { 2239833Speter 2339833Speter/// \brief An UnresolvedSet-like class which uses the ASTContext's allocator. 2439833Speterclass ASTUnresolvedSet { 2539833Speter typedef ASTVector<DeclAccessPair> DeclsTy; 2639833Speter DeclsTy Decls; 27119482Sobrien 28119482Sobrien ASTUnresolvedSet(const ASTUnresolvedSet &) LLVM_DELETED_FUNCTION; 29119482Sobrien void operator=(const ASTUnresolvedSet &) LLVM_DELETED_FUNCTION; 30114379Speter 3139833Speterpublic: 3239833Speter ASTUnresolvedSet() {} 3339833Speter ASTUnresolvedSet(ASTContext &C, unsigned N) : Decls(C, N) {} 3439833Speter 3539833Speter typedef UnresolvedSetIterator iterator; 3639833Speter typedef UnresolvedSetIterator const_iterator; 3739833Speter 3839833Speter iterator begin() { return iterator(Decls.begin()); } 3939833Speter iterator end() { return iterator(Decls.end()); } 4039833Speter 4139833Speter const_iterator begin() const { return const_iterator(Decls.begin()); } 4239833Speter const_iterator end() const { return const_iterator(Decls.end()); } 43114379Speter 44134459Siedowse void addDecl(ASTContext &C, NamedDecl *D) { 4539833Speter addDecl(C, D, AS_none); 46114379Speter } 47134459Siedowse 4839833Speter void addDecl(ASTContext &C, NamedDecl *D, AccessSpecifier AS) { 49114379Speter Decls.push_back(DeclAccessPair::make(D, AS), C); 50114379Speter } 51114379Speter 52114379Speter /// Replaces the given declaration with the new one, once. 53114379Speter /// 54114379Speter /// \return true if the set changed 55114379Speter bool replace(const NamedDecl* Old, NamedDecl *New) { 56114379Speter for (DeclsTy::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) 57114379Speter if (I->getDecl() == Old) 58114379Speter return (I->setDecl(New), true); 59114379Speter return false; 60114379Speter } 61114379Speter 62114379Speter void erase(unsigned I) { 63114379Speter Decls[I] = Decls.back(); 64162814Sru Decls.pop_back(); 65114379Speter } 6639833Speter 67163708Sru void clear() { Decls.clear(); } 6839833Speter 6939833Speter bool empty() const { return Decls.empty(); } 7039833Speter unsigned size() const { return Decls.size(); } 7139833Speter 72114379Speter void reserve(ASTContext &C, unsigned N) { 7339833Speter Decls.reserve(C, N); 7459854Sbp } 7539833Speter 76114379Speter void append(ASTContext &C, iterator I, iterator E) { 77114379Speter Decls.append(C, I.ir, E.ir); 78114379Speter } 7939833Speter 8059854Sbp DeclAccessPair &operator[](unsigned I) { return Decls[I]; } 81199806Strasz const DeclAccessPair &operator[](unsigned I) const { return Decls[I]; } 8239833Speter}; 8339833Speter 84114379Speter} // namespace clang 85114379Speter 8639902Smsmith#endif 8739902Smsmith