1//===- Streamutil.h - PDB stream utilities ----------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H 10#define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H 11 12#include "llvm/ADT/Optional.h" 13#include "llvm/ADT/SmallVector.h" 14#include "llvm/ADT/StringRef.h" 15 16#include <string> 17 18namespace llvm { 19namespace pdb { 20class PDBFile; 21enum class StreamPurpose { 22 NamedStream, 23 ModuleStream, 24 Symbols, 25 PDB, 26 DBI, 27 TPI, 28 IPI, 29 GlobalHash, 30 PublicHash, 31 TpiHash, 32 IpiHash, 33 Other 34}; 35 36struct StreamInfo { 37public: 38 StreamInfo() {} 39 40 uint32_t getModuleIndex() const { return *ModuleIndex; } 41 StreamPurpose getPurpose() const { return Purpose; } 42 StringRef getShortName() const { return Name; } 43 uint32_t getStreamIndex() const { return StreamIndex; } 44 std::string getLongName() const; 45 46 static StreamInfo createStream(StreamPurpose Purpose, StringRef Name, 47 uint32_t StreamIndex); 48 static StreamInfo createModuleStream(StringRef Module, uint32_t StreamIndex, 49 uint32_t Modi); 50 51private: 52 StreamPurpose Purpose; 53 uint32_t StreamIndex; 54 std::string Name; 55 Optional<uint32_t> ModuleIndex; 56}; 57 58void discoverStreamPurposes(PDBFile &File, 59 SmallVectorImpl<StreamInfo> &Streams); 60} 61} 62 63#endif 64