1 //===- Streamutil.h - PDB stream utilities ----------------------*- 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_TOOLS_LLVMPDBDUMP_STREAMUTIL_H 11 #define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H 12 13 #include "llvm/ADT/Optional.h" 14 #include "llvm/ADT/SmallVector.h" 15 #include "llvm/ADT/StringRef.h" 16 17 #include <string> 18 19 namespace llvm { 20 namespace pdb { 21 class PDBFile; 22 enum class StreamPurpose { 23 NamedStream, 24 ModuleStream, 25 Symbols, 26 PDB, 27 DBI, 28 TPI, 29 IPI, 30 GlobalHash, 31 PublicHash, 32 TpiHash, 33 IpiHash, 34 Other 35 }; 36 37 struct StreamInfo { 38 public: StreamInfoStreamInfo39 StreamInfo() {} 40 getModuleIndexStreamInfo41 uint32_t getModuleIndex() const { return *ModuleIndex; } getPurposeStreamInfo42 StreamPurpose getPurpose() const { return Purpose; } getShortNameStreamInfo43 StringRef getShortName() const { return Name; } getStreamIndexStreamInfo44 uint32_t getStreamIndex() const { return StreamIndex; } 45 std::string getLongName() const; 46 47 static StreamInfo createStream(StreamPurpose Purpose, StringRef Name, 48 uint32_t StreamIndex); 49 static StreamInfo createModuleStream(StringRef Module, uint32_t StreamIndex, 50 uint32_t Modi); 51 52 private: 53 StreamPurpose Purpose; 54 uint32_t StreamIndex; 55 std::string Name; 56 Optional<uint32_t> ModuleIndex; 57 }; 58 59 void discoverStreamPurposes(PDBFile &File, 60 SmallVectorImpl<StreamInfo> &Streams); 61 } 62 } 63 64 #endif 65