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