LLVM 22.0.0git
llvm::BinaryStreamWriter Class Reference

Provides write only access to a subclass of WritableBinaryStream. More...

#include "llvm/Support/BinaryStreamWriter.h"

Public Member Functions

 BinaryStreamWriter ()=default
LLVM_ABI BinaryStreamWriter (WritableBinaryStreamRef Ref)
LLVM_ABI BinaryStreamWriter (WritableBinaryStream &Stream)
LLVM_ABI BinaryStreamWriter (MutableArrayRef< uint8_t > Data, llvm::endianness Endian)
 BinaryStreamWriter (const BinaryStreamWriter &Other)=default
BinaryStreamWriteroperator= (const BinaryStreamWriter &Other)=default
virtual ~BinaryStreamWriter ()=default
LLVM_ABI Error writeBytes (ArrayRef< uint8_t > Buffer)
 Write the bytes specified in Buffer to the underlying stream.
template<typename T>
Error writeInteger (T Value)
 Write the integer Value to the underlying stream in the specified endianness.
template<typename T>
Error writeEnum (T Num)
 Similar to writeInteger.
LLVM_ABI Error writeULEB128 (uint64_t Value)
 Write the unsigned integer Value to the underlying stream using ULEB128 encoding.
LLVM_ABI Error writeSLEB128 (int64_t Value)
 Write the unsigned integer Value to the underlying stream using ULEB128 encoding.
LLVM_ABI Error writeCString (StringRef Str)
 Write the string Str to the underlying stream followed by a null terminator.
LLVM_ABI Error writeFixedString (StringRef Str)
 Write the string Str to the underlying stream without a null terminator.
LLVM_ABI Error writeStreamRef (BinaryStreamRef Ref)
 Efficiently reads all data from Ref, and writes it to this stream.
LLVM_ABI Error writeStreamRef (BinaryStreamRef Ref, uint64_t Size)
 Efficiently reads Size bytes from Ref, and writes it to this stream.
template<typename T>
Error writeObject (const T &Obj)
 Writes the object Obj to the underlying stream, as if by using memcpy.
template<typename T>
Error writeArray (ArrayRef< T > Array)
 Writes an array of objects of type T to the underlying stream, as if by using memcpy.
template<typename T, typename U>
Error writeArray (VarStreamArray< T, U > Array)
 Writes all data from the array Array to the underlying stream.
template<typename T>
Error writeArray (FixedStreamArray< T > Array)
 Writes all elements from the array Array to the underlying stream.
LLVM_ABI std::pair< BinaryStreamWriter, BinaryStreamWritersplit (uint64_t Off) const
 Splits the Writer into two Writers at a given offset.
void setOffset (uint64_t Off)
uint64_t getOffset () const
uint64_t getLength () const
uint64_t bytesRemaining () const
LLVM_ABI Error padToAlignment (uint32_t Align)

Protected Attributes

WritableBinaryStreamRef Stream
uint64_t Offset = 0

Detailed Description

Provides write only access to a subclass of WritableBinaryStream.

Provides bounds checking and helpers for writing certain common data types such as null-terminated strings, integers in various flavors of endianness, etc. Can be subclassed to provide reading and writing of custom datatypes, although no methods are overridable.

Definition at line 31 of file BinaryStreamWriter.h.

Constructor & Destructor Documentation

◆ BinaryStreamWriter() [1/5]

llvm::BinaryStreamWriter::BinaryStreamWriter ( )
default

References llvm::Data, LLVM_ABI, llvm::Ref, and Stream.

Referenced by BinaryStreamWriter(), operator=(), and split().

◆ BinaryStreamWriter() [2/5]

BinaryStreamWriter::BinaryStreamWriter ( WritableBinaryStreamRef Ref)
explicit

Definition at line 18 of file BinaryStreamWriter.cpp.

References llvm::Ref, and Stream.

◆ BinaryStreamWriter() [3/5]

BinaryStreamWriter::BinaryStreamWriter ( WritableBinaryStream & Stream)
explicit

Definition at line 21 of file BinaryStreamWriter.cpp.

References Stream.

◆ BinaryStreamWriter() [4/5]

BinaryStreamWriter::BinaryStreamWriter ( MutableArrayRef< uint8_t > Data,
llvm::endianness Endian )
explicit

Definition at line 24 of file BinaryStreamWriter.cpp.

References llvm::Data, and Stream.

◆ BinaryStreamWriter() [5/5]

llvm::BinaryStreamWriter::BinaryStreamWriter ( const BinaryStreamWriter & Other)
default

◆ ~BinaryStreamWriter()

virtual llvm::BinaryStreamWriter::~BinaryStreamWriter ( )
virtualdefault

References LLVM_ABI.

Member Function Documentation

◆ bytesRemaining()

◆ getLength()

uint64_t llvm::BinaryStreamWriter::getLength ( ) const
inline

Definition at line 180 of file BinaryStreamWriter.h.

References Stream.

Referenced by bytesRemaining(), and split().

◆ getOffset()

◆ operator=()

BinaryStreamWriter & llvm::BinaryStreamWriter::operator= ( const BinaryStreamWriter & Other)
default

◆ padToAlignment()

◆ setOffset()

void llvm::BinaryStreamWriter::setOffset ( uint64_t Off)
inline

◆ split()

std::pair< BinaryStreamWriter, BinaryStreamWriter > BinaryStreamWriter::split ( uint64_t Off) const

Splits the Writer into two Writers at a given offset.

Definition at line 83 of file BinaryStreamWriter.cpp.

References assert(), BinaryStreamWriter(), llvm::First, getLength(), Offset, and Stream.

◆ writeArray() [1/3]

template<typename T>
Error llvm::BinaryStreamWriter::writeArray ( ArrayRef< T > Array)
inline

Writes an array of objects of type T to the underlying stream, as if by using memcpy.

It is up to the caller to ensure that type of Obj can be safely copied in this fashion, as no checks are made to ensure that this is safe.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 145 of file BinaryStreamWriter.h.

References llvm::invalid_array_size, llvm::make_error(), llvm::Error::success(), T, and writeBytes().

Referenced by llvm::pdb::DbiStreamBuilder::addDbgStream(), llvm::codeview::DebugChecksumsSubsection::commit(), llvm::codeview::DebugCrossModuleImportsSubsection::commit(), llvm::codeview::DebugFrameDataSubsection::commit(), llvm::codeview::DebugInlineeLinesSubsection::commit(), llvm::codeview::DebugLinesSubsection::commit(), llvm::codeview::DebugSymbolRVASubsection::commit(), llvm::msf::MSFBuilder::commit(), llvm::pdb::DbiStreamBuilder::commit(), llvm::pdb::GSIHashStreamBuilder::commit(), llvm::pdb::DbiStreamBuilder::finalizeMsfLayout(), and padToAlignment().

◆ writeArray() [2/3]

template<typename T>
Error llvm::BinaryStreamWriter::writeArray ( FixedStreamArray< T > Array)
inline

Writes all elements from the array Array to the underlying stream.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 170 of file BinaryStreamWriter.h.

References writeStreamRef().

◆ writeArray() [3/3]

template<typename T, typename U>
Error llvm::BinaryStreamWriter::writeArray ( VarStreamArray< T, U > Array)
inline

Writes all data from the array Array to the underlying stream.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 162 of file BinaryStreamWriter.h.

References writeStreamRef().

◆ writeBytes()

Error BinaryStreamWriter::writeBytes ( ArrayRef< uint8_t > Buffer)

Write the bytes specified in Buffer to the underlying stream.

On success, updates the offset so that subsequent writes will occur at the next unwritten position.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 28 of file BinaryStreamWriter.cpp.

References Offset, llvm::ArrayRef< T >::size(), Stream, and llvm::Error::success().

Referenced by llvm::codeview::DebugSymbolsSubsection::commit(), llvm::pdb::PDBFileBuilder::commit(), llvm::pdb::TpiStreamBuilder::commit(), llvm::pdb::DbiModuleDescriptorBuilder::commitSymbolStream(), llvm::msf::WritableMappedBlockStream::createFpmStream(), llvm::CodeViewYAML::toDebugT(), writeArray(), writeFixedString(), writeInteger(), writeObject(), writePublics(), writeSLEB128(), writeStreamRef(), and writeULEB128().

◆ writeCString()

Error BinaryStreamWriter::writeCString ( StringRef Str)

Write the string Str to the underlying stream followed by a null terminator.

On success, updates the offset so that subsequent writes occur at the next unwritten position. Str need not be null terminated on input.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 47 of file BinaryStreamWriter.cpp.

References llvm::Error::success(), writeFixedString(), and writeObject().

Referenced by llvm::codeview::DebugStringTableSubsection::commit(), and llvm::pdb::DbiModuleDescriptorBuilder::commit().

◆ writeEnum()

template<typename T>
Error llvm::BinaryStreamWriter::writeEnum ( T Num)
inline

◆ writeFixedString()

Error BinaryStreamWriter::writeFixedString ( StringRef Str)

Write the string Str to the underlying stream without a null terminator.

On success, updates the offset so that subsequent writes occur at the next unwritten position.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 56 of file BinaryStreamWriter.cpp.

References llvm::arrayRefFromStringRef(), and writeBytes().

Referenced by llvm::pdb::NamedStreamMap::commit(), llvm::CodeViewYAML::toDebugH(), and writeCString().

◆ writeInteger()

◆ writeObject()

template<typename T>
Error llvm::BinaryStreamWriter::writeObject ( const T & Obj)
inline

◆ writeSLEB128()

Error BinaryStreamWriter::writeSLEB128 ( int64_t Value)

Write the unsigned integer Value to the underlying stream using ULEB128 encoding.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 41 of file BinaryStreamWriter.cpp.

References llvm::encodeSLEB128(), Size, and writeBytes().

◆ writeStreamRef() [1/2]

Error BinaryStreamWriter::writeStreamRef ( BinaryStreamRef Ref)

Efficiently reads all data from Ref, and writes it to this stream.

This operation will not invoke any copies of the source data, regardless of the source stream's implementation.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 61 of file BinaryStreamWriter.cpp.

References llvm::Ref, and writeStreamRef().

Referenced by llvm::codeview::DebugSubsectionRecordBuilder::commit(), llvm::pdb::DbiStreamBuilder::commit(), llvm::pdb::TpiStreamBuilder::commit(), writeArray(), writeArray(), writeRecords(), and writeStreamRef().

◆ writeStreamRef() [2/2]

Error BinaryStreamWriter::writeStreamRef ( BinaryStreamRef Ref,
uint64_t Size )

Efficiently reads Size bytes from Ref, and writes it to this stream.

This operation will not invoke any copies of the source data, regardless of the source stream's implementation.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 65 of file BinaryStreamWriter.cpp.

References llvm::BinaryStreamReader::bytesRemaining(), llvm::Length, llvm::BinaryStreamReader::readLongestContiguousChunk(), llvm::Ref, llvm::Error::success(), and writeBytes().

◆ writeULEB128()

Error BinaryStreamWriter::writeULEB128 ( uint64_t Value)

Write the unsigned integer Value to the underlying stream using ULEB128 encoding.

Returns
a success error code if the data was successfully written, otherwise returns an appropriate error code.

Definition at line 35 of file BinaryStreamWriter.cpp.

References llvm::encodeULEB128(), Size, and writeBytes().

Member Data Documentation

◆ Offset

uint64_t llvm::BinaryStreamWriter::Offset = 0
protected

Definition at line 186 of file BinaryStreamWriter.h.

Referenced by getOffset(), padToAlignment(), setOffset(), split(), and writeBytes().

◆ Stream


The documentation for this class was generated from the following files: