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