1cffff26bSZachary Turner //==- DIAEnumLineNumbers.cpp - DIA Line Number 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/DIAEnumLineNumbers.h" 10cffff26bSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h" 116bda14b3SChandler Carruth #include "llvm/DebugInfo/PDB/PDBSymbol.h" 12cffff26bSZachary Turner 13cffff26bSZachary Turner using namespace llvm; 14ec28fc34SZachary Turner using namespace llvm::pdb; 15cffff26bSZachary Turner DIAEnumLineNumbers(CComPtr<IDiaEnumLineNumbers> DiaEnumerator)16cffff26bSZachary TurnerDIAEnumLineNumbers::DIAEnumLineNumbers( 17cffff26bSZachary Turner CComPtr<IDiaEnumLineNumbers> DiaEnumerator) 18cffff26bSZachary Turner : Enumerator(DiaEnumerator) {} 19cffff26bSZachary Turner getChildCount() const20cffff26bSZachary Turneruint32_t DIAEnumLineNumbers::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<IPDBLineNumber> getChildAtIndex(uint32_t Index) const26cffff26bSZachary TurnerDIAEnumLineNumbers::getChildAtIndex(uint32_t Index) const { 27cffff26bSZachary Turner CComPtr<IDiaLineNumber> Item; 28cffff26bSZachary Turner if (S_OK != Enumerator->Item(Index, &Item)) 29cffff26bSZachary Turner return nullptr; 30cffff26bSZachary Turner 31cffff26bSZachary Turner return std::unique_ptr<IPDBLineNumber>(new DIALineNumber(Item)); 32cffff26bSZachary Turner } 33cffff26bSZachary Turner getNext()34cffff26bSZachary Turnerstd::unique_ptr<IPDBLineNumber> DIAEnumLineNumbers::getNext() { 35cffff26bSZachary Turner CComPtr<IDiaLineNumber> 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<IPDBLineNumber>(new DIALineNumber(Item)); 41cffff26bSZachary Turner } 42cffff26bSZachary Turner reset()43cffff26bSZachary Turnervoid DIAEnumLineNumbers::reset() { Enumerator->Reset(); } 44