1 //===- TpiStream.cpp - PDB Type Info (TPI) Stream 2 Access ------*- C++ -*-===// 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 #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBTPISTREAM_H 11 #define LLVM_DEBUGINFO_PDB_RAW_PDBTPISTREAM_H 12 13 #include "llvm/DebugInfo/CodeView/TypeRecord.h" 14 #include "llvm/DebugInfo/PDB/Native/HashTable.h" 15 #include "llvm/DebugInfo/PDB/Native/RawConstants.h" 16 #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 17 #include "llvm/DebugInfo/PDB/PDBTypes.h" 18 #include "llvm/Support/BinaryStreamArray.h" 19 #include "llvm/Support/BinaryStreamRef.h" 20 #include "llvm/Support/raw_ostream.h" 21 22 #include "llvm/Support/Error.h" 23 24 namespace llvm { 25 namespace codeview { 26 class LazyRandomTypeCollection; 27 } 28 namespace msf { 29 class MappedBlockStream; 30 } 31 namespace pdb { 32 class PDBFile; 33 34 class TpiStream { 35 friend class TpiStreamBuilder; 36 37 public: 38 TpiStream(PDBFile &File, std::unique_ptr<msf::MappedBlockStream> Stream); 39 ~TpiStream(); 40 Error reload(); 41 42 PdbRaw_TpiVer getTpiVersion() const; 43 44 uint32_t TypeIndexBegin() const; 45 uint32_t TypeIndexEnd() const; 46 uint32_t getNumTypeRecords() const; 47 uint16_t getTypeHashStreamIndex() const; 48 uint16_t getTypeHashStreamAuxIndex() const; 49 50 uint32_t getHashKeySize() const; 51 uint32_t getNumHashBuckets() const; 52 FixedStreamArray<support::ulittle32_t> getHashValues() const; 53 FixedStreamArray<codeview::TypeIndexOffset> getTypeIndexOffsets() const; 54 HashTable<support::ulittle32_t> &getHashAdjusters(); 55 56 codeview::CVTypeRange types(bool *HadError) const; typeArray()57 const codeview::CVTypeArray &typeArray() const { return TypeRecords; } 58 typeCollection()59 codeview::LazyRandomTypeCollection &typeCollection() { return *Types; } 60 61 BinarySubstreamRef getTypeRecordsSubstream() const; 62 63 Error commit(); 64 65 private: 66 PDBFile &Pdb; 67 std::unique_ptr<msf::MappedBlockStream> Stream; 68 69 std::unique_ptr<codeview::LazyRandomTypeCollection> Types; 70 71 BinarySubstreamRef TypeRecordsSubstream; 72 73 codeview::CVTypeArray TypeRecords; 74 75 std::unique_ptr<BinaryStream> HashStream; 76 FixedStreamArray<support::ulittle32_t> HashValues; 77 FixedStreamArray<codeview::TypeIndexOffset> TypeIndexOffsets; 78 HashTable<support::ulittle32_t> HashAdjusters; 79 80 const TpiStreamHeader *Header; 81 }; 82 } 83 } 84 85 #endif 86