1e8d8bef9SDimitry Andric //==- NativeEnumSymbols.cpp - Native Symbol Enumerator impl ------*- C++ -*-==// 2e8d8bef9SDimitry Andric // 3e8d8bef9SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e8d8bef9SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e8d8bef9SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e8d8bef9SDimitry Andric // 7e8d8bef9SDimitry Andric //===----------------------------------------------------------------------===// 8e8d8bef9SDimitry Andric 9e8d8bef9SDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeEnumSymbols.h" 10e8d8bef9SDimitry Andric 11*81ad6265SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeView.h" 12e8d8bef9SDimitry Andric #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h" 13e8d8bef9SDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeSession.h" 14*81ad6265SDimitry Andric #include "llvm/DebugInfo/PDB/Native/SymbolCache.h" 15e8d8bef9SDimitry Andric #include "llvm/DebugInfo/PDB/PDBSymbol.h" 16e8d8bef9SDimitry Andric 17e8d8bef9SDimitry Andric using namespace llvm; 18e8d8bef9SDimitry Andric using namespace llvm::codeview; 19e8d8bef9SDimitry Andric using namespace llvm::pdb; 20e8d8bef9SDimitry Andric NativeEnumSymbols(NativeSession & PDBSession,std::vector<SymIndexId> Symbols)21e8d8bef9SDimitry AndricNativeEnumSymbols::NativeEnumSymbols(NativeSession &PDBSession, 22e8d8bef9SDimitry Andric std::vector<SymIndexId> Symbols) 23e8d8bef9SDimitry Andric : Symbols(std::move(Symbols)), Index(0), Session(PDBSession) {} 24e8d8bef9SDimitry Andric getChildCount() const25e8d8bef9SDimitry Andricuint32_t NativeEnumSymbols::getChildCount() const { 26e8d8bef9SDimitry Andric return static_cast<uint32_t>(Symbols.size()); 27e8d8bef9SDimitry Andric } 28e8d8bef9SDimitry Andric 29e8d8bef9SDimitry Andric std::unique_ptr<PDBSymbol> getChildAtIndex(uint32_t N) const30e8d8bef9SDimitry AndricNativeEnumSymbols::getChildAtIndex(uint32_t N) const { 31e8d8bef9SDimitry Andric if (N < Symbols.size()) { 32e8d8bef9SDimitry Andric return Session.getSymbolCache().getSymbolById(Symbols[N]); 33e8d8bef9SDimitry Andric } 34e8d8bef9SDimitry Andric return nullptr; 35e8d8bef9SDimitry Andric } 36e8d8bef9SDimitry Andric getNext()37e8d8bef9SDimitry Andricstd::unique_ptr<PDBSymbol> NativeEnumSymbols::getNext() { 38e8d8bef9SDimitry Andric return getChildAtIndex(Index++); 39e8d8bef9SDimitry Andric } 40e8d8bef9SDimitry Andric reset()41e8d8bef9SDimitry Andricvoid NativeEnumSymbols::reset() { Index = 0; } 42