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