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