blob: f810f7dc15b4c8399201e7a2617d1b69bf3b5312 [file] [log] [blame]
Zachary Turner6ac232c2017-03-13 23:28:25 +00001//===- Streamutil.h - PDB stream utilities ----------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Zachary Turner6ac232c2017-03-13 23:28:25 +00006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H
10#define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H
11
Zachary Turnerd1de2f42017-08-21 14:53:25 +000012#include "llvm/ADT/Optional.h"
Zachary Turner6ac232c2017-03-13 23:28:25 +000013#include "llvm/ADT/SmallVector.h"
Zachary Turnerd1de2f42017-08-21 14:53:25 +000014#include "llvm/ADT/StringRef.h"
Zachary Turner6ac232c2017-03-13 23:28:25 +000015
16#include <string>
17
18namespace llvm {
19namespace pdb {
20class PDBFile;
Zachary Turnerd5cf5cf2018-03-30 17:16:50 +000021enum 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};
Zachary Turnerd1de2f42017-08-21 14:53:25 +000035
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};
Zachary Turnera9d944f2017-07-10 19:16:49 +000057
Zachary Turner6ac232c2017-03-13 23:28:25 +000058void discoverStreamPurposes(PDBFile &File,
Zachary Turnerd1de2f42017-08-21 14:53:25 +000059 SmallVectorImpl<StreamInfo> &Streams);
Zachary Turner6ac232c2017-03-13 23:28:25 +000060}
61}
62
63#endif