1215226Sadrian//==- NativeEnumTypes.h - Native Type Enumerator impl ------------*- C++ -*-==//
2215226Sadrian//
3215226Sadrian// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4215226Sadrian// See https://llvm.org/LICENSE.txt for license information.
5215226Sadrian// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6215226Sadrian//
7215226Sadrian//===----------------------------------------------------------------------===//
8215226Sadrian
9215226Sadrian#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVEENUMTYPES_H
10215226Sadrian#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVEENUMTYPES_H
11215226Sadrian
12215226Sadrian#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
13215226Sadrian#include "llvm/DebugInfo/CodeView/TypeRecord.h"
14215226Sadrian#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
15215226Sadrian#include "llvm/DebugInfo/PDB/PDBSymbol.h"
16215226Sadrian
17215226Sadrian#include <vector>
18215226Sadrian
19215226Sadriannamespace llvm {
20215226Sadriannamespace pdb {
21215226Sadrian
22215226Sadrianclass NativeSession;
23215226Sadrian
24215226Sadrianclass NativeEnumTypes : public IPDBEnumChildren<PDBSymbol> {
25215226Sadrianpublic:
26215226Sadrian  NativeEnumTypes(NativeSession &Session,
27215226Sadrian                  codeview::LazyRandomTypeCollection &TypeCollection,
28215226Sadrian                  std::vector<codeview::TypeLeafKind> Kinds);
29215226Sadrian
30215226Sadrian  NativeEnumTypes(NativeSession &Session,
31215226Sadrian                  std::vector<codeview::TypeIndex> Indices);
32215226Sadrian
33215226Sadrian  uint32_t getChildCount() const override;
34215226Sadrian  std::unique_ptr<PDBSymbol> getChildAtIndex(uint32_t Index) const override;
35215226Sadrian  std::unique_ptr<PDBSymbol> getNext() override;
36215226Sadrian  void reset() override;
37215226Sadrian
38215226Sadrianprivate:
39252048Ssjg  std::vector<codeview::TypeIndex> Matches;
40252048Ssjg  uint32_t Index;
41215226Sadrian  NativeSession &Session;
42215226Sadrian};
43215226Sadrian
44215226Sadrian} // namespace pdb
45215226Sadrian} // namespace llvm
46215226Sadrian
47252827Semaste#endif
48252827Semaste