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