1 //===- MemoryTypeTableBuilder.h ---------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_DEBUGINFO_CODEVIEW_MEMORYTYPETABLEBUILDER_H
11 #define LLVM_DEBUGINFO_CODEVIEW_MEMORYTYPETABLEBUILDER_H
13 #include "llvm/ADT/Hashing.h"
14 #include "llvm/ADT/StringRef.h"
15 #include "llvm/DebugInfo/CodeView/TypeTableBuilder.h"
18 #include <unordered_map>
24 class MemoryTypeTableBuilder : public TypeTableBuilder {
28 explicit Record(llvm::StringRef RData);
30 const char *data() const { return Data.get(); }
31 uint16_t size() const { return Size; }
35 std::unique_ptr<char[]> Data;
39 class RecordHash : std::unary_function<llvm::StringRef, size_t> {
41 size_t operator()(llvm::StringRef Val) const {
42 return static_cast<size_t>(llvm::hash_value(Val));
47 MemoryTypeTableBuilder() {}
49 template <typename TFunc> void ForEachRecord(TFunc Func) {
50 uint32_t Index = TypeIndex::FirstNonSimpleIndex;
52 for (const std::unique_ptr<Record> &R : Records) {
53 Func(TypeIndex(Index), R.get());
59 virtual TypeIndex writeRecord(llvm::StringRef Data) override;
62 std::vector<std::unique_ptr<Record>> Records;
63 std::unordered_map<llvm::StringRef, TypeIndex, RecordHash> HashedRecords;