1//===- TypeCollection.h - A collection of CodeView type records -*- 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#ifndef LLVM_DEBUGINFO_CODEVIEW_TYPECOLLECTION_H
10#define LLVM_DEBUGINFO_CODEVIEW_TYPECOLLECTION_H
11
12#include "llvm/ADT/StringRef.h"
13#include "llvm/DebugInfo/CodeView/CVRecord.h"
14#include "llvm/DebugInfo/CodeView/TypeIndex.h"
15
16namespace llvm {
17namespace codeview {
18class TypeCollection {
19public:
20 virtual ~TypeCollection() = default;
21
22 bool empty() { return size() == 0; }
23
24 virtual std::optional<TypeIndex> getFirst() = 0;
25 virtual std::optional<TypeIndex> getNext(TypeIndex Prev) = 0;
26
27 virtual CVType getType(TypeIndex Index) = 0;
28 virtual StringRef getTypeName(TypeIndex Index) = 0;
29 virtual bool contains(TypeIndex Index) = 0;
30 virtual uint32_t size() = 0;
31 virtual uint32_t capacity() = 0;
32 virtual bool replaceType(TypeIndex &Index, CVType Data, bool Stabilize) = 0;
33
34 template <typename TFunc> void ForEachRecord(TFunc Func) {
35 std::optional<TypeIndex> Next = getFirst();
36
37 while (Next) {
38 TypeIndex N = *Next;
39 Func(N, getType(Index: N));
40 Next = getNext(Prev: N);
41 }
42 }
43};
44}
45}
46
47#endif
48

source code of llvm/include/llvm/DebugInfo/CodeView/TypeCollection.h