xref: /llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIAEnumLineNumbers.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
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 Turner DIAEnumLineNumbers::DIAEnumLineNumbers(
17cffff26bSZachary Turner     CComPtr<IDiaEnumLineNumbers> DiaEnumerator)
18cffff26bSZachary Turner     : Enumerator(DiaEnumerator) {}
19cffff26bSZachary Turner 
getChildCount() const20cffff26bSZachary Turner uint32_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 Turner DIAEnumLineNumbers::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 Turner std::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 Turner void DIAEnumLineNumbers::reset() { Enumerator->Reset(); }
44