1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumSourceFiles.cpp - DIA Source File Enumerator impl ---*- C++ -*-==// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbol.h" 11*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIAEnumSourceFiles.h" 12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIASourceFile.h" 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker using namespace llvm; 15*9880d681SAndroid Build Coastguard Worker using namespace llvm::pdb; 16*9880d681SAndroid Build Coastguard Worker DIAEnumSourceFiles(const DIASession & PDBSession,CComPtr<IDiaEnumSourceFiles> DiaEnumerator)17*9880d681SAndroid Build Coastguard WorkerDIAEnumSourceFiles::DIAEnumSourceFiles( 18*9880d681SAndroid Build Coastguard Worker const DIASession &PDBSession, CComPtr<IDiaEnumSourceFiles> DiaEnumerator) 19*9880d681SAndroid Build Coastguard Worker : Session(PDBSession), Enumerator(DiaEnumerator) {} 20*9880d681SAndroid Build Coastguard Worker getChildCount() const21*9880d681SAndroid Build Coastguard Workeruint32_t DIAEnumSourceFiles::getChildCount() const { 22*9880d681SAndroid Build Coastguard Worker LONG Count = 0; 23*9880d681SAndroid Build Coastguard Worker return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0; 24*9880d681SAndroid Build Coastguard Worker } 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker std::unique_ptr<IPDBSourceFile> getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard WorkerDIAEnumSourceFiles::getChildAtIndex(uint32_t Index) const { 28*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaSourceFile> Item; 29*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Item(Index, &Item)) 30*9880d681SAndroid Build Coastguard Worker return nullptr; 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker return std::unique_ptr<IPDBSourceFile>(new DIASourceFile(Session, Item)); 33*9880d681SAndroid Build Coastguard Worker } 34*9880d681SAndroid Build Coastguard Worker getNext()35*9880d681SAndroid Build Coastguard Workerstd::unique_ptr<IPDBSourceFile> DIAEnumSourceFiles::getNext() { 36*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaSourceFile> Item; 37*9880d681SAndroid Build Coastguard Worker ULONG NumFetched = 0; 38*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 39*9880d681SAndroid Build Coastguard Worker return nullptr; 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker return std::unique_ptr<IPDBSourceFile>(new DIASourceFile(Session, Item)); 42*9880d681SAndroid Build Coastguard Worker } 43*9880d681SAndroid Build Coastguard Worker reset()44*9880d681SAndroid Build Coastguard Workervoid DIAEnumSourceFiles::reset() { Enumerator->Reset(); } 45*9880d681SAndroid Build Coastguard Worker clone() const46*9880d681SAndroid Build Coastguard WorkerDIAEnumSourceFiles *DIAEnumSourceFiles::clone() const { 47*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumSourceFiles> EnumeratorClone; 48*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Clone(&EnumeratorClone)) 49*9880d681SAndroid Build Coastguard Worker return nullptr; 50*9880d681SAndroid Build Coastguard Worker return new DIAEnumSourceFiles(Session, EnumeratorClone); 51*9880d681SAndroid Build Coastguard Worker } 52