xref: /llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIAEnumSectionContribs.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1523de05aSAaron Smith //==- DIAEnumSectionContribs.cpp ---------------------------------*- C++ -*-==//
2523de05aSAaron Smith //
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
6523de05aSAaron Smith //
7523de05aSAaron Smith //===----------------------------------------------------------------------===//
8523de05aSAaron Smith 
9523de05aSAaron Smith #include "llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h"
10523de05aSAaron Smith #include "llvm/DebugInfo/PDB/DIA/DIASectionContrib.h"
11523de05aSAaron Smith #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
12523de05aSAaron Smith 
13523de05aSAaron Smith using namespace llvm;
14523de05aSAaron Smith using namespace llvm::pdb;
15523de05aSAaron Smith 
DIAEnumSectionContribs(const DIASession & PDBSession,CComPtr<IDiaEnumSectionContribs> DiaEnumerator)16523de05aSAaron Smith DIAEnumSectionContribs::DIAEnumSectionContribs(
17523de05aSAaron Smith     const DIASession &PDBSession,
18523de05aSAaron Smith     CComPtr<IDiaEnumSectionContribs> DiaEnumerator)
19523de05aSAaron Smith     : Session(PDBSession), Enumerator(DiaEnumerator) {}
20523de05aSAaron Smith 
getChildCount() const21523de05aSAaron Smith uint32_t DIAEnumSectionContribs::getChildCount() const {
22523de05aSAaron Smith   LONG Count = 0;
23523de05aSAaron Smith   return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
24523de05aSAaron Smith }
25523de05aSAaron Smith 
26523de05aSAaron Smith std::unique_ptr<IPDBSectionContrib>
getChildAtIndex(uint32_t Index) const27523de05aSAaron Smith DIAEnumSectionContribs::getChildAtIndex(uint32_t Index) const {
28523de05aSAaron Smith   CComPtr<IDiaSectionContrib> Item;
29523de05aSAaron Smith   if (S_OK != Enumerator->Item(Index, &Item))
30523de05aSAaron Smith     return nullptr;
31523de05aSAaron Smith 
32523de05aSAaron Smith   return std::unique_ptr<IPDBSectionContrib>(
33523de05aSAaron Smith       new DIASectionContrib(Session, Item));
34523de05aSAaron Smith }
35523de05aSAaron Smith 
getNext()36523de05aSAaron Smith std::unique_ptr<IPDBSectionContrib> DIAEnumSectionContribs::getNext() {
37523de05aSAaron Smith   CComPtr<IDiaSectionContrib> Item;
38523de05aSAaron Smith   ULONG NumFetched = 0;
39523de05aSAaron Smith   if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
40523de05aSAaron Smith     return nullptr;
41523de05aSAaron Smith 
42523de05aSAaron Smith   return std::unique_ptr<IPDBSectionContrib>(
43523de05aSAaron Smith       new DIASectionContrib(Session, Item));
44523de05aSAaron Smith }
45523de05aSAaron Smith 
reset()46523de05aSAaron Smith void DIAEnumSectionContribs::reset() { Enumerator->Reset(); }
47