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