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 KlecknerDIAEnumFrameData::DIAEnumFrameData(CComPtr<IDiaEnumFrameData> DiaEnumerator) 1607589729SReid Kleckner : Enumerator(DiaEnumerator) {} 17c43e086cSAleksandr Urakov getChildCount() const18c43e086cSAleksandr Urakovuint32_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 UrakovDIAEnumFrameData::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 Urakovstd::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 Urakovvoid DIAEnumFrameData::reset() { Enumerator->Reset(); } 42