1cffff26bSZachary Turner //==- DIAEnumSourceFiles.cpp - DIA Source File 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 9cffff26bSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIAEnumSourceFiles.h" 10cffff26bSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIASourceFile.h" 116bda14b3SChandler Carruth #include "llvm/DebugInfo/PDB/PDBSymbol.h" 12cffff26bSZachary Turner 13cffff26bSZachary Turner using namespace llvm; 14ec28fc34SZachary Turner using namespace llvm::pdb; 15cffff26bSZachary Turner DIAEnumSourceFiles(const DIASession & PDBSession,CComPtr<IDiaEnumSourceFiles> DiaEnumerator)16cffff26bSZachary TurnerDIAEnumSourceFiles::DIAEnumSourceFiles( 17cffff26bSZachary Turner const DIASession &PDBSession, CComPtr<IDiaEnumSourceFiles> DiaEnumerator) 18cffff26bSZachary Turner : Session(PDBSession), Enumerator(DiaEnumerator) {} 19cffff26bSZachary Turner getChildCount() const20cffff26bSZachary Turneruint32_t DIAEnumSourceFiles::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<IPDBSourceFile> getChildAtIndex(uint32_t Index) const26cffff26bSZachary TurnerDIAEnumSourceFiles::getChildAtIndex(uint32_t Index) const { 27cffff26bSZachary Turner CComPtr<IDiaSourceFile> Item; 28cffff26bSZachary Turner if (S_OK != Enumerator->Item(Index, &Item)) 29cffff26bSZachary Turner return nullptr; 30cffff26bSZachary Turner 31cffff26bSZachary Turner return std::unique_ptr<IPDBSourceFile>(new DIASourceFile(Session, Item)); 32cffff26bSZachary Turner } 33cffff26bSZachary Turner getNext()34cffff26bSZachary Turnerstd::unique_ptr<IPDBSourceFile> DIAEnumSourceFiles::getNext() { 35cffff26bSZachary Turner CComPtr<IDiaSourceFile> Item; 36cffff26bSZachary Turner ULONG NumFetched = 0; 37cffff26bSZachary Turner if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 38cffff26bSZachary Turner return nullptr; 39cffff26bSZachary Turner 40cffff26bSZachary Turner return std::unique_ptr<IPDBSourceFile>(new DIASourceFile(Session, Item)); 41cffff26bSZachary Turner } 42cffff26bSZachary Turner reset()43cffff26bSZachary Turnervoid DIAEnumSourceFiles::reset() { Enumerator->Reset(); } 44