Home | History | Annotate | Download | only in Native
      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 &getHashAdjusters();
     55 
     56   codeview::CVTypeRange types(bool *HadError) const;
     57   const codeview::CVTypeArray &typeArray() const { return TypeRecords; }
     58 
     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 HashAdjusters;
     79 
     80   const TpiStreamHeader *Header;
     81 };
     82 }
     83 }
     84 
     85 #endif
     86