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 SmithDIAEnumSectionContribs::DIAEnumSectionContribs( 17523de05aSAaron Smith const DIASession &PDBSession, 18523de05aSAaron Smith CComPtr<IDiaEnumSectionContribs> DiaEnumerator) 19523de05aSAaron Smith : Session(PDBSession), Enumerator(DiaEnumerator) {} 20523de05aSAaron Smith getChildCount() const21523de05aSAaron Smithuint32_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 SmithDIAEnumSectionContribs::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 Smithstd::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 Smithvoid DIAEnumSectionContribs::reset() { Enumerator->Reset(); } 47