1336809Sdim//==- DIAEnumSectionContribs.cpp ---------------------------------*- C++ -*-==// 2336809Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6336809Sdim// 7336809Sdim//===----------------------------------------------------------------------===// 8336809Sdim 9336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h" 10336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIASectionContrib.h" 11336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIASession.h" 12336809Sdim 13336809Sdimusing namespace llvm; 14336809Sdimusing namespace llvm::pdb; 15336809Sdim 16336809SdimDIAEnumSectionContribs::DIAEnumSectionContribs( 17336809Sdim const DIASession &PDBSession, 18336809Sdim CComPtr<IDiaEnumSectionContribs> DiaEnumerator) 19336809Sdim : Session(PDBSession), Enumerator(DiaEnumerator) {} 20336809Sdim 21336809Sdimuint32_t DIAEnumSectionContribs::getChildCount() const { 22336809Sdim LONG Count = 0; 23336809Sdim return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0; 24336809Sdim} 25336809Sdim 26336809Sdimstd::unique_ptr<IPDBSectionContrib> 27336809SdimDIAEnumSectionContribs::getChildAtIndex(uint32_t Index) const { 28336809Sdim CComPtr<IDiaSectionContrib> Item; 29336809Sdim if (S_OK != Enumerator->Item(Index, &Item)) 30336809Sdim return nullptr; 31336809Sdim 32336809Sdim return std::unique_ptr<IPDBSectionContrib>( 33336809Sdim new DIASectionContrib(Session, Item)); 34336809Sdim} 35336809Sdim 36336809Sdimstd::unique_ptr<IPDBSectionContrib> DIAEnumSectionContribs::getNext() { 37336809Sdim CComPtr<IDiaSectionContrib> Item; 38336809Sdim ULONG NumFetched = 0; 39336809Sdim if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) 40336809Sdim return nullptr; 41336809Sdim 42336809Sdim return std::unique_ptr<IPDBSectionContrib>( 43336809Sdim new DIASectionContrib(Session, Item)); 44336809Sdim} 45336809Sdim 46336809Sdimvoid DIAEnumSectionContribs::reset() { Enumerator->Reset(); } 47