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 AndricDIAEnumFrameData::DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator) 17*b5893f02SDimitry Andric : Enumerator(DiaEnumerator) {} 18*b5893f02SDimitry Andric getChildCount() const19*b5893f02SDimitry Andricuint32_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 AndricDIAEnumFrameData::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 Andricstd::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 Andricvoid DIAEnumFrameData::reset() { Enumerator->Reset(); } 43