xref: /aosp_15_r20/external/llvm/lib/DebugInfo/PDB/DIA/DIAEnumSourceFiles.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //==- DIAEnumSourceFiles.cpp - DIA Source File 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/DIAEnumSourceFiles.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/DIA/DIASourceFile.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 
DIAEnumSourceFiles(const DIASession & PDBSession,CComPtr<IDiaEnumSourceFiles> DiaEnumerator)17*9880d681SAndroid Build Coastguard Worker DIAEnumSourceFiles::DIAEnumSourceFiles(
18*9880d681SAndroid Build Coastguard Worker     const DIASession &PDBSession, CComPtr<IDiaEnumSourceFiles> DiaEnumerator)
19*9880d681SAndroid Build Coastguard Worker     : Session(PDBSession), Enumerator(DiaEnumerator) {}
20*9880d681SAndroid Build Coastguard Worker 
getChildCount() const21*9880d681SAndroid Build Coastguard Worker uint32_t DIAEnumSourceFiles::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<IPDBSourceFile>
getChildAtIndex(uint32_t Index) const27*9880d681SAndroid Build Coastguard Worker DIAEnumSourceFiles::getChildAtIndex(uint32_t Index) const {
28*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaSourceFile> 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<IPDBSourceFile>(new DIASourceFile(Session, Item));
33*9880d681SAndroid Build Coastguard Worker }
34*9880d681SAndroid Build Coastguard Worker 
getNext()35*9880d681SAndroid Build Coastguard Worker std::unique_ptr<IPDBSourceFile> DIAEnumSourceFiles::getNext() {
36*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaSourceFile> 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<IPDBSourceFile>(new DIASourceFile(Session, Item));
42*9880d681SAndroid Build Coastguard Worker }
43*9880d681SAndroid Build Coastguard Worker 
reset()44*9880d681SAndroid Build Coastguard Worker void DIAEnumSourceFiles::reset() { Enumerator->Reset(); }
45*9880d681SAndroid Build Coastguard Worker 
clone() const46*9880d681SAndroid Build Coastguard Worker DIAEnumSourceFiles *DIAEnumSourceFiles::clone() const {
47*9880d681SAndroid Build Coastguard Worker   CComPtr<IDiaEnumSourceFiles> 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 DIAEnumSourceFiles(Session, EnumeratorClone);
51*9880d681SAndroid Build Coastguard Worker }
52