xref: /freebsd/contrib/llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIAEnumTables.cpp (revision 7fdf597e96a02165cfe22ff357b857d5fa15ed8a)
1 //===- DIAEnumTables.cpp - DIA Table Enumerator Impl ------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/DebugInfo/PDB/DIA/DIAEnumTables.h"
10 #include "llvm/DebugInfo/PDB/DIA/DIATable.h"
11 
12 using namespace llvm;
13 using namespace llvm::pdb;
14 
15 DIAEnumTables::DIAEnumTables(CComPtr<IDiaEnumTables> DiaEnumerator)
16     : Enumerator(DiaEnumerator) {}
17 
18 uint32_t DIAEnumTables::getChildCount() const {
19   LONG Count = 0;
20   return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
21 }
22 
23 std::unique_ptr<IPDBTable>
24 DIAEnumTables::getChildAtIndex(uint32_t Index) const {
25   CComPtr<IDiaTable> Item;
26   VARIANT Var;
27   Var.vt = VT_UINT;
28   Var.uintVal = Index;
29   if (S_OK != Enumerator->Item(Var, &Item))
30     return nullptr;
31 
32   return std::unique_ptr<IPDBTable>(new DIATable(Item));
33 }
34 
35 std::unique_ptr<IPDBTable> DIAEnumTables::getNext() {
36   CComPtr<IDiaTable> Item;
37   ULONG CeltFetched = 0;
38   if (S_OK != Enumerator->Next(1, &Item, &CeltFetched))
39     return nullptr;
40 
41   return std::unique_ptr<IPDBTable>(new DIATable(Item));
42 }
43 
44 void DIAEnumTables::reset() { Enumerator->Reset(); }
45