15 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_BITCODEWRITER_H
16 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_BITCODEWRITER_H
19 #include "clang/AST/AST.h"
20 #include "llvm/ADT/DenseMap.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/StringRef.h"
23 #include "llvm/Bitstream/BitstreamWriter.h"
24 #include <initializer_list>
47 static constexpr
unsigned char Signature[4] = {
'D',
'O',
'C',
'S'};
144 emitBlockInfoBlock();
164 class AbbreviationMap {
165 llvm::DenseMap<unsigned, unsigned> Abbrevs;
170 void add(
RecordId RID,
unsigned AbbrevID);
174 class StreamSubBlockGuard {
175 llvm::BitstreamWriter &Stream;
178 StreamSubBlockGuard(llvm::BitstreamWriter &Stream_,
BlockId ID)
185 StreamSubBlockGuard(
const StreamSubBlockGuard &) =
delete;
186 StreamSubBlockGuard &operator=(
const StreamSubBlockGuard &) =
delete;
188 ~StreamSubBlockGuard() { Stream.ExitBlock(); }
193 void emitVersionBlock();
196 void emitBlockInfoBlock();
197 void emitBlockInfo(
BlockId BID,
const std::vector<RecordId> &RIDs);
200 void emitRecord(StringRef Str,
RecordId ID);
203 void emitRecord(
const Reference &Ref,
RecordId ID);
204 void emitRecord(
bool Value,
RecordId ID);
205 void emitRecord(
int Value,
RecordId ID);
206 void emitRecord(
unsigned Value,
RecordId ID);
207 bool prepRecordData(
RecordId ID,
bool ShouldEmit =
true);
214 SmallVector<uint32_t, BitCodeConstants::RecordSize> Record;
215 llvm::BitstreamWriter &Stream;
216 AbbreviationMap Abbrevs;
222 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_BITCODEWRITER_H