1//===-- MemoryTypeTableBuilder.cpp ----------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "llvm/DebugInfo/CodeView/MemoryTypeTableBuilder.h" 11#include "llvm/DebugInfo/CodeView/TypeIndex.h" 12 13using namespace llvm; 14using namespace codeview; 15 16MemoryTypeTableBuilder::Record::Record(StringRef RData) 17 : Size(RData.size()), Data(new char[RData.size()]) { 18 memcpy(Data.get(), RData.data(), RData.size()); 19} 20 21TypeIndex MemoryTypeTableBuilder::writeRecord(StringRef Data) { 22 auto I = HashedRecords.find(Data); 23 if (I != HashedRecords.end()) { 24 return I->second; 25 } 26 27 std::unique_ptr<Record> R(new Record(Data)); 28 29 TypeIndex TI(static_cast<uint32_t>(Records.size()) + 30 TypeIndex::FirstNonSimpleIndex); 31 HashedRecords.insert(std::make_pair(StringRef(R->data(), R->size()), TI)); 32 Records.push_back(std::move(R)); 33 34 return TI; 35} 36