1*b5893f02SDimitry Andric //==- DIAEnumFrameData.cpp ---------------------------------------*- C++ -*-==//
2*b5893f02SDimitry Andric //
3*b5893f02SDimitry Andric //                     The LLVM Compiler Infrastructure
4*b5893f02SDimitry Andric //
5*b5893f02SDimitry Andric // This file is distributed under the University of Illinois Open Source
6*b5893f02SDimitry Andric // License. See LICENSE.TXT for details.
7*b5893f02SDimitry Andric //
8*b5893f02SDimitry Andric //===----------------------------------------------------------------------===//
9*b5893f02SDimitry Andric 
10*b5893f02SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAEnumFrameData.h"
11*b5893f02SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h"
12*b5893f02SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
13*b5893f02SDimitry Andric 
14*b5893f02SDimitry Andric using namespace llvm::pdb;
15*b5893f02SDimitry Andric 
DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator)16*b5893f02SDimitry Andric DIAEnumFrameData::DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator)
17*b5893f02SDimitry Andric     : Enumerator(DiaEnumerator) {}
18*b5893f02SDimitry Andric 
getChildCount() const19*b5893f02SDimitry Andric uint32_t DIAEnumFrameData::getChildCount() const {
20*b5893f02SDimitry Andric   LONG Count = 0;
21*b5893f02SDimitry Andric   return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
22*b5893f02SDimitry Andric }
23*b5893f02SDimitry Andric 
24*b5893f02SDimitry Andric std::unique_ptr<IPDBFrameData>
getChildAtIndex(uint32_t Index) const25*b5893f02SDimitry Andric DIAEnumFrameData::getChildAtIndex(uint32_t Index) const {
26*b5893f02SDimitry Andric   CComPtr<IDiaFrameData> Item;
27*b5893f02SDimitry Andric   if (S_OK != Enumerator->Item(Index, &Item))
28*b5893f02SDimitry Andric     return nullptr;
29*b5893f02SDimitry Andric 
30*b5893f02SDimitry Andric   return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Item));
31*b5893f02SDimitry Andric }
32*b5893f02SDimitry Andric 
getNext()33*b5893f02SDimitry Andric std::unique_ptr<IPDBFrameData> DIAEnumFrameData::getNext() {
34*b5893f02SDimitry Andric   CComPtr<IDiaFrameData> Item;
35*b5893f02SDimitry Andric   ULONG NumFetched = 0;
36*b5893f02SDimitry Andric   if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
37*b5893f02SDimitry Andric     return nullptr;
38*b5893f02SDimitry Andric 
39*b5893f02SDimitry Andric   return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Item));
40*b5893f02SDimitry Andric }
41*b5893f02SDimitry Andric 
reset()42*b5893f02SDimitry Andric void DIAEnumFrameData::reset() { Enumerator->Reset(); }
43