decompiler  1.0.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ghidra::PackedEncode Class Reference

A byte-based encoder designed to marshal from the decompiler efficiently. More...

#include <marshal.hh>

Inheritance diagram for ghidra::PackedEncode:
ghidra::Encoder

Public Member Functions

 PackedEncode (ostream &s)
 Construct from a stream.
 
virtual void openElement (const ElementId &elemId)
 Begin a new element in the encoding. More...
 
virtual void closeElement (const ElementId &elemId)
 End the current element in the encoding. More...
 
virtual void writeBool (const AttributeId &attribId, bool val)
 Write an annotated boolean value into the encoding. More...
 
virtual void writeSignedInteger (const AttributeId &attribId, intb val)
 Write an annotated signed integer value into the encoding. More...
 
virtual void writeUnsignedInteger (const AttributeId &attribId, uintb val)
 Write an annotated unsigned integer value into the encoding. More...
 
virtual void writeString (const AttributeId &attribId, const string &val)
 Write an annotated string into the encoding. More...
 
virtual void writeStringIndexed (const AttributeId &attribId, uint4 index, const string &val)
 Write an annotated string, using an indexed attribute, into the encoding. More...
 
virtual void writeSpace (const AttributeId &attribId, const AddrSpace *spc)
 Write an address space reference into the encoding. More...
 
- Public Member Functions inherited from ghidra::Encoder
virtual ~Encoder (void)
 Destructor.
 

Private Member Functions

void writeHeader (uint1 header, uint4 id)
 Write a header, element or attribute, to stream. More...
 
void writeInteger (uint1 typeByte, uint8 val)
 Write an integer value to the stream. More...
 

Private Attributes

ostream & outStream
 The stream receiving the encoded data.
 

Detailed Description

A byte-based encoder designed to marshal from the decompiler efficiently.

See PackedDecode for details of the encoding format.

Member Function Documentation

◆ closeElement()

void ghidra::PackedEncode::closeElement ( const ElementId elemId)
virtual

◆ openElement()

void ghidra::PackedEncode::openElement ( const ElementId elemId)
virtual

◆ writeBool()

void ghidra::PackedEncode::writeBool ( const AttributeId attribId,
bool  val 
)
virtual

Write an annotated boolean value into the encoding.

The boolean data is associated with the given AttributeId annotation and the current open element.

Parameters
attribIdis the given AttributeId annotation
valis boolean value to encode

Implements ghidra::Encoder.

◆ writeHeader()

void ghidra::PackedEncode::writeHeader ( uint1  header,
uint4  id 
)
inlineprivate

Write a header, element or attribute, to stream.

Parameters
headeris the type of header
idis the id associated with the element or attribute

References ghidra::PackedFormat::HEADEREXTEND_MASK, ghidra::AttributeId::id, ghidra::PackedFormat::RAWDATA_BITSPERBYTE, ghidra::PackedFormat::RAWDATA_MARKER, and ghidra::PackedFormat::RAWDATA_MASK.

◆ writeInteger()

void ghidra::PackedEncode::writeInteger ( uint1  typeByte,
uint8  val 
)
private

Write an integer value to the stream.

The value is either an unsigned integer, an address space index, or (the absolute value of) a signed integer. A type header is passed in with the particular type code for the value already filled in. This method then fills in the length code, outputs the full type header and the encoded bytes of the integer.

Parameters
typeByteis the type header
valis the integer value

◆ writeSignedInteger()

void ghidra::PackedEncode::writeSignedInteger ( const AttributeId attribId,
intb  val 
)
virtual

Write an annotated signed integer value into the encoding.

The integer is associated with the given AttributeId annotation and the current open element.

Parameters
attribIdis the given AttributeId annotation
valis the signed integer value to encode

Implements ghidra::Encoder.

Referenced by ghidra::ArchitectureGhidra::getCPoolRef(), ghidra::ArchitectureGhidra::getDataType(), ghidra::ArchitectureGhidra::getStringData(), and ghidra::ArchitectureGhidra::getUserOpName().

◆ writeSpace()

void ghidra::PackedEncode::writeSpace ( const AttributeId attribId,
const AddrSpace spc 
)
virtual

Write an address space reference into the encoding.

The address space is associated with the given AttributeId annotation and the current open element.

Parameters
attribIdis the given AttributeId annotation
spcis the address space to encode

Implements ghidra::Encoder.

◆ writeString()

void ghidra::PackedEncode::writeString ( const AttributeId attribId,
const string &  val 
)
virtual

Write an annotated string into the encoding.

The string is associated with the given AttributeId annotation and the current open element.

Parameters
attribIdis the given AttributeId annotation
valis the string to encode

Implements ghidra::Encoder.

Referenced by ghidra::ArchitectureGhidra::getDataType(), ghidra::ArchitectureGhidra::getPcodeInject(), ghidra::ArchitectureGhidra::getRegister(), ghidra::ArchitectureGhidra::getStringData(), and ghidra::ArchitectureGhidra::isNameUsed().

◆ writeStringIndexed()

void ghidra::PackedEncode::writeStringIndexed ( const AttributeId attribId,
uint4  index,
const string &  val 
)
virtual

Write an annotated string, using an indexed attribute, into the encoding.

Multiple attributes with a shared name can be written to the same element by calling this method multiple times with a different index value. The encoding will use attribute ids up to the base id plus the maximum index passed in. Implementors must be careful to not use other attributes with ids bigger than the base id within the element taking the indexed attribute.

Parameters
attribIdis the shared AttributeId
indexis the unique index to associated with the string
valis the string to encode

Implements ghidra::Encoder.

◆ writeUnsignedInteger()

void ghidra::PackedEncode::writeUnsignedInteger ( const AttributeId attribId,
uintb  val 
)
virtual

Write an annotated unsigned integer value into the encoding.

The integer is associated with the given AttributeId annotation and the current open element.

Parameters
attribIdis the given AttributeId annotation
valis the unsigned integer value to encode

Implements ghidra::Encoder.

Referenced by ghidra::ArchitectureGhidra::getComments(), ghidra::ArchitectureGhidra::getCPoolRef(), ghidra::ArchitectureGhidra::getNamespacePath(), ghidra::ArchitectureGhidra::getStringData(), and ghidra::ArchitectureGhidra::isNameUsed().


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