1//===- InfoStreamBuilder.h - PDB Info Stream Creation -----------*- 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_DEBUGINFO_PDB_RAW_PDBINFOSTREAMBUILDER_H
11#define LLVM_DEBUGINFO_PDB_RAW_PDBINFOSTREAMBUILDER_H
12
13#include "llvm/ADT/Optional.h"
14#include "llvm/Support/Error.h"
15
16#include "llvm/DebugInfo/PDB/Native/NamedStreamMap.h"
17#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
18#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
19#include "llvm/DebugInfo/PDB/PDBTypes.h"
20
21namespace llvm {
22class WritableBinaryStreamRef;
23
24namespace msf {
25class MSFBuilder;
26}
27namespace pdb {
28class PDBFile;
29class NamedStreamMap;
30
31class InfoStreamBuilder {
32public:
33  InfoStreamBuilder(msf::MSFBuilder &Msf, NamedStreamMap &NamedStreams);
34  InfoStreamBuilder(const InfoStreamBuilder &) = delete;
35  InfoStreamBuilder &operator=(const InfoStreamBuilder &) = delete;
36
37  void setVersion(PdbRaw_ImplVer V);
38  void setSignature(uint32_t S);
39  void setAge(uint32_t A);
40  void setGuid(PDB_UniqueId G);
41  void addFeature(PdbRaw_FeatureSig Sig);
42
43  uint32_t finalize();
44
45  Error finalizeMsfLayout();
46
47  Error commit(const msf::MSFLayout &Layout,
48               WritableBinaryStreamRef Buffer) const;
49
50private:
51  msf::MSFBuilder &Msf;
52
53  std::vector<PdbRaw_FeatureSig> Features;
54  PdbRaw_ImplVer Ver;
55  uint32_t Sig;
56  uint32_t Age;
57  PDB_UniqueId Guid;
58
59  NamedStreamMap &NamedStreams;
60};
61}
62}
63
64#endif
65