1*7330f729Sjoerg //==- DIAEnumLineNumbers.cpp - DIA Line Number Enumerator impl ---*- C++ -*-==// 2*7330f729Sjoerg // 3*7330f729Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7330f729Sjoerg // See https://llvm.org/LICENSE.txt for license information. 5*7330f729Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7330f729Sjoerg // 7*7330f729Sjoerg //===----------------------------------------------------------------------===// 8*7330f729Sjoerg 9*7330f729Sjoerg #include "llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h" 10*7330f729Sjoerg #include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h" 11*7330f729Sjoerg #include "llvm/DebugInfo/PDB/PDBSymbol.h" 12*7330f729Sjoerg 13*7330f729Sjoerg using namespace llvm; 14*7330f729Sjoerg using namespace llvm::pdb; 15*7330f729Sjoerg DIAEnumLineNumbers(CComPtr<IDiaEnumLineNumbers> DiaEnumerator)16*7330f729SjoergDIAEnumLineNumbers::DIAEnumLineNumbers( 17*7330f729Sjoerg CComPtr<IDiaEnumLineNumbers> DiaEnumerator) 18*7330f729Sjoerg : Enumerator(DiaEnumerator) {} 19*7330f729Sjoerg getChildCount() const20*7330f729Sjoerguint32_t DIAEnumLineNumbers::getChildCount() const { 21*7330f729Sjoerg LONG Count = 0; 22*7330f729Sjoerg return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0; 23*7330f729Sjoerg } 24*7330f729Sjoerg 25*7330f729Sjoerg std::unique_ptr<IPDBLineNumber> getChildAtIndex(uint32_t Index) const26*7330f729SjoergDIAEnumLineNumbers::getChildAtIndex(uint32_t Index) const { 27*7330f729Sjoerg CComPtr<IDiaLineNumber> Item; 28*7330f729Sjoerg if (S_OK != Enumerator->Item(Index, &Item)) 29*7330f729Sjoerg return nullptr; 30*7330f729Sjoerg 31*7330f729Sjoerg return std::unique_ptr<IPDBLineNumber>(new DIALineNumber(Item)); 32*7330f729Sjoerg } 33*7330f729Sjoerg getNext()34*7330f729Sjoergstd::unique_ptr<IPDBLineNumber> DIAEnumLineNumbers::getNext() { 35*7330f729Sjoerg CComPtr<IDiaLineNumber> Item; 36*7330f729Sjoerg ULONG NumFetched = 0; 37*7330f729Sjoerg if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 38*7330f729Sjoerg return nullptr; 39*7330f729Sjoerg 40*7330f729Sjoerg return std::unique_ptr<IPDBLineNumber>(new DIALineNumber(Item)); 41*7330f729Sjoerg } 42*7330f729Sjoerg reset()43*7330f729Sjoergvoid DIAEnumLineNumbers::reset() { Enumerator->Reset(); } 44