1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumDebugStreams.cpp - DIA Debug Stream 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/DIADataStream.h" 12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.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 DIAEnumDebugStreams(CComPtr<IDiaEnumDebugStreams> DiaEnumerator)17*9880d681SAndroid Build Coastguard WorkerDIAEnumDebugStreams::DIAEnumDebugStreams( 18*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumDebugStreams> DiaEnumerator) 19*9880d681SAndroid Build Coastguard Worker : Enumerator(DiaEnumerator) {} 20*9880d681SAndroid Build Coastguard Worker getChildCount() const21*9880d681SAndroid Build Coastguard Workeruint32_t DIAEnumDebugStreams::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<IPDBDataStream> getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard WorkerDIAEnumDebugStreams::getChildAtIndex(uint32_t Index) const { 28*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumDebugStreamData> Item; 29*9880d681SAndroid Build Coastguard Worker VARIANT VarIndex; 30*9880d681SAndroid Build Coastguard Worker VarIndex.vt = VT_I4; 31*9880d681SAndroid Build Coastguard Worker VarIndex.lVal = Index; 32*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Item(VarIndex, &Item)) 33*9880d681SAndroid Build Coastguard Worker return nullptr; 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item)); 36*9880d681SAndroid Build Coastguard Worker } 37*9880d681SAndroid Build Coastguard Worker getNext()38*9880d681SAndroid Build Coastguard Workerstd::unique_ptr<IPDBDataStream> DIAEnumDebugStreams::getNext() { 39*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumDebugStreamData> Item; 40*9880d681SAndroid Build Coastguard Worker ULONG NumFetched = 0; 41*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 42*9880d681SAndroid Build Coastguard Worker return nullptr; 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item)); 45*9880d681SAndroid Build Coastguard Worker } 46*9880d681SAndroid Build Coastguard Worker reset()47*9880d681SAndroid Build Coastguard Workervoid DIAEnumDebugStreams::reset() { Enumerator->Reset(); } 48*9880d681SAndroid Build Coastguard Worker clone() const49*9880d681SAndroid Build Coastguard WorkerDIAEnumDebugStreams *DIAEnumDebugStreams::clone() const { 50*9880d681SAndroid Build Coastguard Worker CComPtr<IDiaEnumDebugStreams> EnumeratorClone; 51*9880d681SAndroid Build Coastguard Worker if (S_OK != Enumerator->Clone(&EnumeratorClone)) 52*9880d681SAndroid Build Coastguard Worker return nullptr; 53*9880d681SAndroid Build Coastguard Worker return new DIAEnumDebugStreams(EnumeratorClone); 54*9880d681SAndroid Build Coastguard Worker } 55