1c43e086cSAleksandr Urakov //==- DIAEnumFrameData.cpp ---------------------------------------*- C++ -*-==//
2c43e086cSAleksandr Urakov //
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
6c43e086cSAleksandr Urakov //
7c43e086cSAleksandr Urakov //===----------------------------------------------------------------------===//
8c43e086cSAleksandr Urakov 
9c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIAEnumFrameData.h"
10c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h"
11c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
12c43e086cSAleksandr Urakov 
13c43e086cSAleksandr Urakov using namespace llvm::pdb;
14c43e086cSAleksandr Urakov 
DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator)1507589729SReid Kleckner DIAEnumFrameData::DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator)
1607589729SReid Kleckner     : Enumerator(DiaEnumerator) {}
17c43e086cSAleksandr Urakov 
getChildCount() const18c43e086cSAleksandr Urakov uint32_t DIAEnumFrameData::getChildCount() const {
19c43e086cSAleksandr Urakov   LONG Count = 0;
20c43e086cSAleksandr Urakov   return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
21c43e086cSAleksandr Urakov }
22c43e086cSAleksandr Urakov 
23c43e086cSAleksandr Urakov std::unique_ptr<IPDBFrameData>
getChildAtIndex(uint32_t Index) const24c43e086cSAleksandr Urakov DIAEnumFrameData::getChildAtIndex(uint32_t Index) const {
25c43e086cSAleksandr Urakov   CComPtr<IDiaFrameData> Item;
26c43e086cSAleksandr Urakov   if (S_OK != Enumerator->Item(Index, &Item))
27c43e086cSAleksandr Urakov     return nullptr;
28c43e086cSAleksandr Urakov 
2907589729SReid Kleckner   return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Item));
30c43e086cSAleksandr Urakov }
31c43e086cSAleksandr Urakov 
getNext()32c43e086cSAleksandr Urakov std::unique_ptr<IPDBFrameData> DIAEnumFrameData::getNext() {
33c43e086cSAleksandr Urakov   CComPtr<IDiaFrameData> Item;
34c43e086cSAleksandr Urakov   ULONG NumFetched = 0;
35c43e086cSAleksandr Urakov   if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
36c43e086cSAleksandr Urakov     return nullptr;
37c43e086cSAleksandr Urakov 
3807589729SReid Kleckner   return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Item));
39c43e086cSAleksandr Urakov }
40c43e086cSAleksandr Urakov 
reset()41c43e086cSAleksandr Urakov void DIAEnumFrameData::reset() { Enumerator->Reset(); }
42