1318663Sdim//===- TypeCollection.h - A collection of CodeView type records -*- C++ -*-===// 2318663Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6318663Sdim// 7318663Sdim//===----------------------------------------------------------------------===// 8318663Sdim 9318663Sdim#ifndef LLVM_DEBUGINFO_CODEVIEW_TYPECOLLECTION_H 10318663Sdim#define LLVM_DEBUGINFO_CODEVIEW_TYPECOLLECTION_H 11318663Sdim 12318663Sdim#include "llvm/ADT/StringRef.h" 13318663Sdim 14318663Sdim#include "llvm/DebugInfo/CodeView/TypeIndex.h" 15318663Sdim#include "llvm/DebugInfo/CodeView/TypeRecord.h" 16318663Sdim 17318663Sdimnamespace llvm { 18318663Sdimnamespace codeview { 19318663Sdimclass TypeCollection { 20318663Sdimpublic: 21318663Sdim virtual ~TypeCollection() = default; 22318663Sdim 23318663Sdim bool empty() { return size() == 0; } 24318663Sdim 25318663Sdim virtual Optional<TypeIndex> getFirst() = 0; 26318663Sdim virtual Optional<TypeIndex> getNext(TypeIndex Prev) = 0; 27318663Sdim 28318663Sdim virtual CVType getType(TypeIndex Index) = 0; 29318663Sdim virtual StringRef getTypeName(TypeIndex Index) = 0; 30318663Sdim virtual bool contains(TypeIndex Index) = 0; 31318663Sdim virtual uint32_t size() = 0; 32318663Sdim virtual uint32_t capacity() = 0; 33327952Sdim 34327952Sdim template <typename TFunc> void ForEachRecord(TFunc Func) { 35327952Sdim Optional<TypeIndex> Next = getFirst(); 36327952Sdim 37327952Sdim while (Next.hasValue()) { 38327952Sdim TypeIndex N = *Next; 39327952Sdim Func(N, getType(N)); 40327952Sdim Next = getNext(N); 41327952Sdim } 42327952Sdim } 43318663Sdim}; 44318663Sdim} 45318663Sdim} 46318663Sdim 47318663Sdim#endif 48