64 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H10#define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H11 12#include "llvm/ADT/SmallVector.h"13#include "llvm/ADT/StringRef.h"14 15#include <string>16#include <optional>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 Other34};35 36struct StreamInfo {37public:38 StreamInfo() = default;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 std::optional<uint32_t> ModuleIndex;56};57 58void discoverStreamPurposes(PDBFile &File,59 SmallVectorImpl<StreamInfo> &Streams);60}61}62 63#endif64