1cffff26bSZachary Turner //==- DIAEnumDebugStreams.cpp - DIA Debug Stream Enumerator impl -*- C++ -*-==// 2cffff26bSZachary Turner // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6cffff26bSZachary Turner // 7cffff26bSZachary Turner //===----------------------------------------------------------------------===// 8cffff26bSZachary Turner 971f308adSChandler Carruth #include "llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.h" 106bda14b3SChandler Carruth #include "llvm/DebugInfo/PDB/DIA/DIADataStream.h" 116bda14b3SChandler Carruth #include "llvm/DebugInfo/PDB/PDBSymbol.h" 12cffff26bSZachary Turner 13cffff26bSZachary Turner using namespace llvm; 14ec28fc34SZachary Turner using namespace llvm::pdb; 15cffff26bSZachary Turner DIAEnumDebugStreams(CComPtr<IDiaEnumDebugStreams> DiaEnumerator)16cffff26bSZachary TurnerDIAEnumDebugStreams::DIAEnumDebugStreams( 17cffff26bSZachary Turner CComPtr<IDiaEnumDebugStreams> DiaEnumerator) 18cffff26bSZachary Turner : Enumerator(DiaEnumerator) {} 19cffff26bSZachary Turner getChildCount() const20cffff26bSZachary Turneruint32_t DIAEnumDebugStreams::getChildCount() const { 21cffff26bSZachary Turner LONG Count = 0; 22cffff26bSZachary Turner return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0; 23cffff26bSZachary Turner } 24cffff26bSZachary Turner 25cffff26bSZachary Turner std::unique_ptr<IPDBDataStream> getChildAtIndex(uint32_t Index) const26cffff26bSZachary TurnerDIAEnumDebugStreams::getChildAtIndex(uint32_t Index) const { 27cffff26bSZachary Turner CComPtr<IDiaEnumDebugStreamData> Item; 28cffff26bSZachary Turner VARIANT VarIndex; 29cffff26bSZachary Turner VarIndex.vt = VT_I4; 30cffff26bSZachary Turner VarIndex.lVal = Index; 31cffff26bSZachary Turner if (S_OK != Enumerator->Item(VarIndex, &Item)) 32cffff26bSZachary Turner return nullptr; 33cffff26bSZachary Turner 34cffff26bSZachary Turner return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item)); 35cffff26bSZachary Turner } 36cffff26bSZachary Turner getNext()37cffff26bSZachary Turnerstd::unique_ptr<IPDBDataStream> DIAEnumDebugStreams::getNext() { 38cffff26bSZachary Turner CComPtr<IDiaEnumDebugStreamData> Item; 39cffff26bSZachary Turner ULONG NumFetched = 0; 40cffff26bSZachary Turner if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 41cffff26bSZachary Turner return nullptr; 42cffff26bSZachary Turner 43cffff26bSZachary Turner return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item)); 44cffff26bSZachary Turner } 45cffff26bSZachary Turner reset()46cffff26bSZachary Turnervoid DIAEnumDebugStreams::reset() { Enumerator->Reset(); } 47