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/PDBTypes.h"
17#include "llvm/DebugInfo/PDB/Raw/NameMap.h"
18#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
19#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
20
21namespace llvm {
22namespace pdb {
23class NameMap;
24class PDBFile;
25
26class InfoStreamBuilder {
27public:
28  InfoStreamBuilder(IPDBFile &File);
29  InfoStreamBuilder(const InfoStreamBuilder &) = delete;
30  InfoStreamBuilder &operator=(const InfoStreamBuilder &) = delete;
31
32  void setVersion(PdbRaw_ImplVer V);
33  void setSignature(uint32_t S);
34  void setAge(uint32_t A);
35  void setGuid(PDB_UniqueId G);
36
37  Expected<std::unique_ptr<InfoStream>> build();
38
39private:
40  IPDBFile &File;
41  Optional<PdbRaw_ImplVer> Ver;
42  Optional<uint32_t> Sig;
43  Optional<uint32_t> Age;
44  Optional<PDB_UniqueId> Guid;
45  Optional<NameMap> NamedStreams;
46};
47}
48}
49
50#endif
51