Package ghidra.program.model.pcode
Interface Encoder
- All Known Subinterfaces:
PatchEncoder
- All Known Implementing Classes:
PackedEncode
,PackedEncodeOverlay
,XmlEncode
public interface Encoder
An interface for writing structured data to a stream
The resulting encoded data is structured similarly to an XML document. The document contains a nested set
of \elements, with labels corresponding to the ElementId class. A single element can hold
zero or more attributes and zero or more child elements. An attribute holds a primitive
data element (boolean, long, String) and is labeled by an AttributeId. The document is written
using a sequence of openElement() and closeElement() calls, intermixed with write*() calls to encode
the data primitives. All primitives written using a write*() call are associated with current open element,
and all write*() calls for one element must come before opening any child element.
The traditional XML element text content can be written using the special ATTRIB_CONTENT AttributeId, which
must be the last write*() call associated with the specific element.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Clear any state associated with the encoder The encoder should be ready to write a new document after this call.void
closeElement
(ElementId elemId) End the current element in the encoding The current element must match the given annotation or an exception is thrown.boolean
isEmpty()
The encoder is considered empty if the writeTo() method would output zero bytesvoid
openElement
(ElementId elemId) Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.void
writeBool
(AttributeId attribId, boolean val) Write an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.void
writeSignedInteger
(AttributeId attribId, long val) Write an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.void
writeSpace
(AttributeId attribId, AddressSpace spc) Write an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.void
writeString
(AttributeId attribId, String val) Write an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.void
writeTo
(OutputStream stream) Dump all the accumulated bytes in this encoder to the stream.void
writeUnsignedInteger
(AttributeId attribId, long val) Write an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.
-
Method Details
-
clear
void clear()Clear any state associated with the encoder The encoder should be ready to write a new document after this call. -
openElement
Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.- Parameters:
elemId
- is the given ElementId annotation- Throws:
IOException
- for errors in the underlying stream
-
closeElement
End the current element in the encoding The current element must match the given annotation or an exception is thrown.- Parameters:
elemId
- is the given (expected) annotation for the current element- Throws:
IOException
- for errors in the underlying stream
-
writeBool
Write an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is boolean value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSignedInteger
Write an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the signed integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeUnsignedInteger
Write an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the unsigned integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeString
Write an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the string to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSpace
Write an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationspc
- is the address space to encode- Throws:
IOException
- for errors in the underlying stream
-
writeTo
Dump all the accumulated bytes in this encoder to the stream.- Parameters:
stream
- is the output stream- Throws:
IOException
- for errors during the write operation
-
isEmpty
boolean isEmpty()The encoder is considered empty if the writeTo() method would output zero bytes- Returns:
- true if there are no bytes in the encoder
-