xref: /aosp_15_r20/external/llvm/lib/DebugInfo/PDB/DIA/DIAEnumLineNumbers.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumLineNumbers.cpp - DIA Line Number Enumerator impl ---*- C++ -*-==//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbol.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h"
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker using namespace llvm;
15*9880d681SAndroid Build Coastguard Worker using namespace llvm::pdb;
16*9880d681SAndroid Build Coastguard Worker 
DIAEnumLineNumbers(CComPtr<IDiaEnumLineNumbers> DiaEnumerator)17*9880d681SAndroid Build Coastguard Worker DIAEnumLineNumbers::DIAEnumLineNumbers(
18*9880d681SAndroid Build Coastguard Worker     CComPtr<IDiaEnumLineNumbers> DiaEnumerator)
19*9880d681SAndroid Build Coastguard Worker     : Enumerator(DiaEnumerator) {}
20*9880d681SAndroid Build Coastguard Worker 
getChildCount() const21*9880d681SAndroid Build Coastguard Worker uint32_t DIAEnumLineNumbers::getChildCount() const {
22*9880d681SAndroid Build Coastguard Worker   LONG Count = 0;
23*9880d681SAndroid Build Coastguard Worker   return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
24*9880d681SAndroid Build Coastguard Worker }
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker std::unique_ptr<IPDBLineNumber>
getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard Worker DIAEnumLineNumbers::getChildAtIndex(uint32_t Index) const {
28*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaLineNumber> Item;
29*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Item(Index, &Item))
30*9880d681SAndroid Build Coastguard Worker     return nullptr;
31*9880d681SAndroid Build Coastguard Worker 
32*9880d681SAndroid Build Coastguard Worker   return std::unique_ptr<IPDBLineNumber>(new DIALineNumber(Item));
33*9880d681SAndroid Build Coastguard Worker }
34*9880d681SAndroid Build Coastguard Worker 
getNext()35*9880d681SAndroid Build Coastguard Worker std::unique_ptr<IPDBLineNumber> DIAEnumLineNumbers::getNext() {
36*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaLineNumber> Item;
37*9880d681SAndroid Build Coastguard Worker   ULONG NumFetched = 0;
38*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
39*9880d681SAndroid Build Coastguard Worker     return nullptr;
40*9880d681SAndroid Build Coastguard Worker 
41*9880d681SAndroid Build Coastguard Worker   return std::unique_ptr<IPDBLineNumber>(new DIALineNumber(Item));
42*9880d681SAndroid Build Coastguard Worker }
43*9880d681SAndroid Build Coastguard Worker 
reset()44*9880d681SAndroid Build Coastguard Worker void DIAEnumLineNumbers::reset() { Enumerator->Reset(); }
45*9880d681SAndroid Build Coastguard Worker 
clone() const46*9880d681SAndroid Build Coastguard Worker DIAEnumLineNumbers *DIAEnumLineNumbers::clone() const {
47*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaEnumLineNumbers> EnumeratorClone;
48*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Clone(&EnumeratorClone))
49*9880d681SAndroid Build Coastguard Worker     return nullptr;
50*9880d681SAndroid Build Coastguard Worker   return new DIAEnumLineNumbers(EnumeratorClone);
51*9880d681SAndroid Build Coastguard Worker }
52