xref: /aosp_15_r20/external/llvm/lib/DebugInfo/PDB/DIA/DIAEnumDebugStreams.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumDebugStreams.cpp - DIA Debug Stream 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/DIADataStream.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.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 
DIAEnumDebugStreams(CComPtr<IDiaEnumDebugStreams> DiaEnumerator)17*9880d681SAndroid Build Coastguard Worker DIAEnumDebugStreams::DIAEnumDebugStreams(
18*9880d681SAndroid Build Coastguard Worker     CComPtr<IDiaEnumDebugStreams> DiaEnumerator)
19*9880d681SAndroid Build Coastguard Worker     : Enumerator(DiaEnumerator) {}
20*9880d681SAndroid Build Coastguard Worker 
getChildCount() const21*9880d681SAndroid Build Coastguard Worker uint32_t DIAEnumDebugStreams::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<IPDBDataStream>
getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard Worker DIAEnumDebugStreams::getChildAtIndex(uint32_t Index) const {
28*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaEnumDebugStreamData> Item;
29*9880d681SAndroid Build Coastguard Worker   VARIANT VarIndex;
30*9880d681SAndroid Build Coastguard Worker   VarIndex.vt = VT_I4;
31*9880d681SAndroid Build Coastguard Worker   VarIndex.lVal = Index;
32*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Item(VarIndex, &Item))
33*9880d681SAndroid Build Coastguard Worker     return nullptr;
34*9880d681SAndroid Build Coastguard Worker 
35*9880d681SAndroid Build Coastguard Worker   return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item));
36*9880d681SAndroid Build Coastguard Worker }
37*9880d681SAndroid Build Coastguard Worker 
getNext()38*9880d681SAndroid Build Coastguard Worker std::unique_ptr<IPDBDataStream> DIAEnumDebugStreams::getNext() {
39*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaEnumDebugStreamData> Item;
40*9880d681SAndroid Build Coastguard Worker   ULONG NumFetched = 0;
41*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
42*9880d681SAndroid Build Coastguard Worker     return nullptr;
43*9880d681SAndroid Build Coastguard Worker 
44*9880d681SAndroid Build Coastguard Worker   return std::unique_ptr<IPDBDataStream>(new DIADataStream(Item));
45*9880d681SAndroid Build Coastguard Worker }
46*9880d681SAndroid Build Coastguard Worker 
reset()47*9880d681SAndroid Build Coastguard Worker void DIAEnumDebugStreams::reset() { Enumerator->Reset(); }
48*9880d681SAndroid Build Coastguard Worker 
clone() const49*9880d681SAndroid Build Coastguard Worker DIAEnumDebugStreams *DIAEnumDebugStreams::clone() const {
50*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaEnumDebugStreams> EnumeratorClone;
51*9880d681SAndroid Build Coastguard Worker   if (S_OK != Enumerator->Clone(&EnumeratorClone))
52*9880d681SAndroid Build Coastguard Worker     return nullptr;
53*9880d681SAndroid Build Coastguard Worker   return new DIAEnumDebugStreams(EnumeratorClone);
54*9880d681SAndroid Build Coastguard Worker }
55