1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumLineNumbers.cpp - DIA Line Number 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/DIAEnumLineNumbers.h" 12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIALineNumber.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 DIAEnumLineNumbers(CComPtr<IDiaEnumLineNumbers> DiaEnumerator)17*9880d681SAndroid Build Coastguard WorkerDIAEnumLineNumbers::DIAEnumLineNumbers( 18*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumLineNumbers> DiaEnumerator) 19*9880d681SAndroid Build Coastguard Worker : Enumerator(DiaEnumerator) {} 20*9880d681SAndroid Build Coastguard Worker getChildCount() const21*9880d681SAndroid Build Coastguard Workeruint32_t DIAEnumLineNumbers::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<IPDBLineNumber> getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard WorkerDIAEnumLineNumbers::getChildAtIndex(uint32_t Index) const { 28*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaLineNumber> 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<IPDBLineNumber>(new DIALineNumber(Item)); 33*9880d681SAndroid Build Coastguard Worker } 34*9880d681SAndroid Build Coastguard Worker getNext()35*9880d681SAndroid Build Coastguard Workerstd::unique_ptr<IPDBLineNumber> DIAEnumLineNumbers::getNext() { 36*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaLineNumber> 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<IPDBLineNumber>(new DIALineNumber(Item)); 42*9880d681SAndroid Build Coastguard Worker } 43*9880d681SAndroid Build Coastguard Worker reset()44*9880d681SAndroid Build Coastguard Workervoid DIAEnumLineNumbers::reset() { Enumerator->Reset(); } 45*9880d681SAndroid Build Coastguard Worker clone() const46*9880d681SAndroid Build Coastguard WorkerDIAEnumLineNumbers *DIAEnumLineNumbers::clone() const { 47*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumLineNumbers> 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 DIAEnumLineNumbers(EnumeratorClone); 51*9880d681SAndroid Build Coastguard Worker } 52