Package ghidra.app.util

# Class PseudoData

java.lang.Object
ghidra.app.util.PseudoData

All Implemented Interfaces:
  `Settings`, `CodeUnit`, `Data`, `MemBuffer`, `PropertySet`

public class PseudoData extends Object implements Data
"Fake" data generated by the PseudoDisassembler.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Address`
  `address`
  `protected DataType`
  `baseDataType`
  `protected byte[]`
  `bytes`
  `protected Map<CommentType,String>`
  `comments`
  `protected ProgramDataTypeManager`
  `dataMgr`
  `protected DataType`
  `dataType`
  `protected static final Address[]`
  `emptyAddrArray`
  `protected static final Reference[]`
  `emptyMemRefs`
  `protected int`
  `hash`
  `protected boolean`
  `isBigEndian`
  `protected int`
  `length`
  `protected int`
  `level`
  `protected Address`
  `maxAddress`
  `protected static final int`
  `OP_INDEX`
  `protected Program`
  `program`
  `protected ReferenceManager`
  `refMgr`

  ### Fields inherited from interface ghidra.program.model.listing.CodeUnit

  `COMMENT_PROPERTY, DEFINED_DATA_PROPERTY, EOL_COMMENT, INSTRUCTION_PROPERTY, MNEMONIC, PLATE_COMMENT, POST_COMMENT, PRE_COMMENT, REPEATABLE_COMMENT, SPACE_PROPERTY`

  ### Fields inherited from interface ghidra.docking.settings.Settings

  `EMPTY_STRING_ARRAY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PseudoData(Address address, DataType dataType, MemBuffer memBuffer)`
  `PseudoData(Program program, Address address, DataType dataType, MemBuffer memBuffer)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addMnemonicReference(Address refAddr, RefType refType, SourceType sourceType)`
  Add a reference to the mnemonic for this code unit.
  `void`
  `addOperandReference(int opIndex, Address refAddr, RefType type, SourceType sourceType)`
  Add a user defined reference to the operand at the given index.
  `void`
  `addValueReference(Address refAddr, RefType type)`
  Add a memory reference to the value.
  `void`
  `clearAllSettings()`
  Removes all name-value pairs from this settings object
  `void`
  `clearSetting(String name)`
  Removes any value associated with the given name
  `int`
  `compareTo(Address a)`
  Compares the given address to the address range of this node.
  `protected static int`
  `computeLength(DataType dataType, Address address)`
  `boolean`
  `contains(Address testAddr)`
  Determines if this code unit contains the indicated address.
  `boolean`
  `equals(Object obj)`
  `Address`
  `getAddress()`
  Get the Address which corresponds to the offset 0.
  `Address`
  `getAddress(int opIndex)`
  Get the Address for the given operand index if one exists.
  `String`
  `getAddressString(boolean showBlockName, boolean pad)`
  Get the string representation of the starting address for this code unit.
  `DataType`
  `getBaseDataType()`
  If the dataType is a typeDef, then the typeDef's base type is returned, otherwise, the datatType is returned.
  `protected static DataType`
  `getBaseDataType(DataType dataType)`
  `BigInteger`
  `getBigInteger(int offset, int size, boolean signed)`
  returns the value at the given offset, taking into account the endianness.
  `byte`
  `getByte(int offset)`
  Get one byte from memory at the current position plus offset.
  `String`
  `getByteCodeString()`
  `byte[]`
  `getBytes()`
  Gets the bytes for this code unit.
  `int`
  `getBytes(byte[] b, int offset)`
  Reads `b.length` bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position.
  `void`
  `getBytesInCodeUnit(byte[] buffer, int bufferOffset)`
  Copies max(buffer.length, code unit length) bytes into buffer starting at the given offset in `buffer`.
  `String`
  `getComment(CommentType commentType)`
  Get the comment for the given type
  `String[]`
  `getCommentAsArray(CommentType commentType)`
  Get the comment as an array where each element is a single line for the given type.
  `Data`
  `getComponent(int index)`
  Returns the immediate n'th component or null if none exists.
  `Data`
  `getComponent(int[] componentPath)`
  Get a data item given the index path.
  `Data`
  `getComponentAt(int offset)`
  Deprecated.
  `Data`
  `getComponentContaining(int offset)`
  Return the first immediate child component that contains the byte at the given offset.
  `int`
  `getComponentIndex()`
  Get the index of this component in its parent
  `int`
  `getComponentLevel()`
  Get this data's component level in its hierarchy of components.
  `int[]`
  `getComponentPath()`
  Get the component path if this is a component.
  `String`
  `getComponentPathName()`
  Returns the component path name (dot notation) for this field
  `List<Data>`
  `getComponentsContaining(int offset)`
  Returns a list of all the immediate child components that contain the byte at the given offset.
  `DataType`
  `getDataType()`
  Get the Data type for the data.
  `String`
  `getDefaultLabelPrefix(DataTypeDisplayOptions options)`
  Returns the appropriate string to use as the default label prefix or null if it has no preferred default label prefix;
  `Settings`
  `getDefaultSettings()`
  Returns the underlying default settings for these settings or null if there are none
  `String`
  `getDefaultValueRepresentation()`
  Returns a string that represents the data value without markup.
  `ExternalReference`
  `getExternalReference(int opIndex)`
  Gets the external reference (if any) at the opIndex
  `String`
  `getFieldName()`
  Get the field name of this data item if it is "inside" another data item, otherwise return null.
  `int`
  `getInt(int offset)`
  returns the int at the given offset, taking into account the endianness.
  `int`
  `getIntProperty(String name)`
  Get the int property for name.
  `String`
  `getLabel()`
  Deprecated.
  `final int`
  `getLength()`
  Get the length of the code unit.
  `long`
  `getLong(int offset)`
  returns the long at the given offset, taking into account the endianness.
  `Long`
  `getLong(String name)`
  Gets the Long value associated with the given name
  `Address`
  `getMaxAddress()`
  Get the ending address for this code unit.
  `Memory`
  `getMemory()`
  Get the Memory object actually used by the MemBuffer.
  `Address`
  `getMinAddress()`
  Get the starting address for this code unit.
  `Reference[]`
  `getMnemonicReferences()`
  Get references for the mnemonic for this instruction.
  `String`
  `getMnemonicString()`
  Returns the mnemonic for this code unit, e.g., MOV, JMP.
  `String[]`
  `getNames()`
  Get this list of keys that currently have values associated with them
  `CodeUnit`
  `getNextCodeUnit()`
  Returns the code unit after this code unit..
  `int`
  `getNumComponents()`
  Return the number of components that make up this data item.
  `int`
  `getNumOperands()`
  Returns the number of operands for this code unit..
  `Saveable`
  `getObjectProperty(String name)`
  Get the object property for name; returns null if there is no name property for this code unit.
  `Reference[]`
  `getOperandReferences(int opIndex)`
  Get the references for the operand index.
  `Data`
  `getParent()`
  Get the immediate parent data item of this data item or null if this data item is not contained in another data item.
  `int`
  `getParentOffset()`
  Get the offset of this Data item from the start of its immediate parent.
  `String`
  `getPathName()`
  Returns the full path name (dot notation) for this field.
  `CodeUnit`
  `getPreviousCodeUnit()`
  Returns the code unit before this code unit..
  `Reference`
  `getPrimaryReference(int index)`
  Returns the primary reference for the operand index..
  `Symbol`
  `getPrimarySymbol()`
  Get the primary Symbol for this code unit.
  `Data`
  `getPrimitiveAt(int offset)`
  Returns the primitive component containing this offset (i.e., one that does not have sub-components).
  `Program`
  `getProgram()`
  Returns the program that generated this CodeUnit..
  `ReferenceIterator`
  `getReferenceIteratorTo()`
  Returns an iterator over all references TO this code unit..
  `Reference[]`
  `getReferencesFrom()`
  Get ALL reference FROM this code unit.
  `Data`
  `getRoot()`
  Get the highest level Data item in a hierarchy of structures containing this component.
  `int`
  `getRootOffset()`
  Get the offset of this Data item from the start of the root data item of some hierarchy of structures.
  `Scalar`
  `getScalar(int opIndex)`
  Returns the scalar at the given operand index.
  `short`
  `getShort(int offset)`
  returns the short at the given offset, taking into account the endianness.
  `StackReference`
  `getStackReference(int opIndex)`
  `String`
  `getString(String name)`
  Gets the String value associated with the given name
  `String`
  `getStringProperty(String name)`
  Get the string property for name; returns null if there is no name property for this code unit.
  `Symbol[]`
  `getSymbols()`
  Get the symbols for this code unit.
  `Object`
  `getValue()`
  Returns the value of this data as determined by the corresponding `DataType`.
  `Object`
  `getValue(String name)`
  Gets the object associated with the given name
  `Class<?>`
  `getValueClass()`
  Get the class used to express the value of this data.
  `Reference[]`
  `getValueReferences()`
  Get the references for the value.
  `boolean`
  `getVoidProperty(String name)`
  Returns whether this code unit is marked as having the name property.
  `int`
  `hashCode()`
  `boolean`
  `hasProperty(String name)`
  Returns true if the codeunit has the given property defined.
  `boolean`
  `hasStringValue()`
  Returns true if this data corresponds to string data.
  `void`
  `invalidate()`
  Invalidate memory buffer
  `boolean`
  `isArray()`
  Returns true if this data item is an Array of DataTypes
  `boolean`
  `isBigEndian()`
  Returns true if the underlying bytes are in big-endian order, false if they are little endian.
  `boolean`
  `isChangeAllowed(SettingsDefinition settingsDefinition)`
  Determine if a settings change corresponding to the specified settingsDefinition is permitted.
  `boolean`
  `isConstant()`
  Determine if this data has explicitly been marked as constant.
  `boolean`
  `isDefined()`
  Returns true if the data type is defined.
  `boolean`
  `isDynamic()`
  Returns true if this data item is a dynamic DataType.
  `boolean`
  `isEmpty()`
  Returns true if there are no key-value pairs stored in this settings object.
  `boolean`
  `isPointer()`
  Returns true if this is a pointer, which implies getValue() will return an Object that is an Address.
  `boolean`
  `isStructure()`
  Returns true if this data item is a Structure.
  `boolean`
  `isUnion()`
  Returns true if this data item is a Union.
  `boolean`
  `isValid()`
  `boolean`
  `isVolatile()`
  Determine if this data has explicitly been marked as volatile.
  `boolean`
  `isWritable()`
  Determine if this data has explicitly been marked as writable.
  `Iterator<String>`
  `propertyNames()`
  Get an iterator over the property names which have values applied.
  `protected void`
  `refreshIfNeeded()`
  `void`
  `removeExternalReference(int opIndex)`
  Remove external reference (if any) at the given opIndex
  `void`
  `removeMnemonicReference(Address refAddr)`
  Remove a reference to the mnemonic for this instruction.
  `void`
  `removeOperandReference(int opIndex, Address refAddr)`
  Remove a user defined reference to the operand at opIndex.
  `void`
  `removeProperty(String name)`
  Remove the property value with the given name for this code unit.
  `void`
  `removeStackReference(int opIndex)`
  `void`
  `removeValueReference(Address refAddr)`
  Remove a reference to the value.
  `void`
  `setComment(CommentType commentType, String comment)`
  Set the comment for the given type.
  `void`
  `setCommentAsArray(CommentType commentType, String[] comment)`
  Set the comment for the given type.
  `void`
  `setExternalReference(Reference ref)`
  `void`
  `setLong(String name, long value)`
  Associates the given long value with the name.
  `void`
  `setMemoryReference(int opIndex, Address refAddr, RefType refType)`
  `void`
  `setPrimaryMemoryReference(Reference ref)`
  Sets a memory reference to be the primary reference at its address/opIndex location.
  `void`
  `setProperty(String name)`
  Mark the property name as having a value for this code unit.
  `void`
  `setProperty(String name, int value)`
  Set the property name with the given value for this code unit.
  `void`
  `setProperty(String name, Saveable value)`
  Set the property name with the given value for this code unit.
  `void`
  `setProperty(String name, String value)`
  Set the property name with the given value for this code unit.
  `void`
  `setRegisterReference(int opIndex, Register reg, SourceType sourceType, RefType refType)`
  Sets a register reference at the `offset` on the specified operand index, which effectively substitutes the previous operation interpretation
  NOTE: If another reference was previously set on the operand, then it will be replaced with this register reference
  `void`
  `setStackReference(int opIndex, int offset, SourceType sourceType, RefType refType)`
  Sets a stack reference at the `offset` on the specified operand index, which effectively substitutes the previous operation interpretation
  NOTE: If another reference was previously set on the operand, then it will be replaced with this stack reference
  `void`
  `setString(String name, String value)`
  Associates the given String value with the name.
  `void`
  `setValue(String name, Object value)`
  Associates the given object with the name.
  `String`
  `toString()`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.program.model.listing.CodeUnit

  `addMnemonicReference, addOperandReference, compareTo, contains, getAddressString, getBytes, getBytesInCodeUnit, getComment, getComment, getCommentAsArray, getCommentAsArray, getExternalReference, getLabel, getLength, getMaxAddress, getMinAddress, getMnemonicReferences, getOperandReferences, getPrimaryReference, getPrimarySymbol, getProgram, getReferenceIteratorTo, getReferencesFrom, getSymbols, removeExternalReference, removeMnemonicReference, removeOperandReference, setComment, setComment, setCommentAsArray, setCommentAsArray, setPrimaryMemoryReference, setRegisterReference, setStackReference`

  ### Methods inherited from interface ghidra.program.model.listing.Data

  `isImmutableSettings`

  ### Methods inherited from interface ghidra.program.model.mem.MemBuffer

  `getAddress, getBigInteger, getByte, getBytes, getInputStream, getInputStream, getInt, getLong, getMemory, getShort, getUnsignedByte, getUnsignedInt, getUnsignedShort, getVarLengthInt, getVarLengthUnsignedInt, isBigEndian, isInitializedMemory`

  ### Methods inherited from interface ghidra.program.model.util.PropertySet

  `getIntProperty, getObjectProperty, getStringProperty, getVoidProperty, hasProperty, propertyNames, removeProperty, setProperty, setProperty, setProperty, setProperty`

  ### Methods inherited from interface ghidra.docking.settings.Settings

  `getSuggestedValues`

- ## Field Details

  - ### dataType

    protected DataType dataType

  - ### baseDataType

    protected DataType baseDataType

  - ### OP_INDEX

    protected static final int OP_INDEX
    See Also:
      - Constant Field Values

  - ### level

    protected int level

  - ### dataMgr

    protected ProgramDataTypeManager dataMgr

  - ### address

    protected Address address

  - ### maxAddress

    protected Address maxAddress

  - ### program

    protected Program program

  - ### length

    protected int length

  - ### emptyAddrArray

    protected static final Address[] emptyAddrArray

  - ### hash

    protected int hash

  - ### bytes

    protected byte[] bytes

  - ### isBigEndian

    protected boolean isBigEndian

  - ### emptyMemRefs

    protected static final Reference[] emptyMemRefs

  - ### comments

    protected Map<CommentType,String> comments

  - ### refMgr

    protected ReferenceManager refMgr

- ## Constructor Details

  - ### PseudoData

    public PseudoData(Program program, Address address, DataType dataType, MemBuffer memBuffer) throws AddressOverflowException
    Throws:
      `AddressOverflowException`

  - ### PseudoData

    public PseudoData(Address address, DataType dataType, MemBuffer memBuffer) throws AddressOverflowException
    Throws:
      `AddressOverflowException`

- ## Method Details

  - ### getBaseDataType

    protected static DataType getBaseDataType(DataType dataType)

  - ### computeLength

    protected static int computeLength(DataType dataType, Address address)

  - ### addValueReference

    public void addValueReference(Address refAddr, RefType type)
    Description copied from interface: `Data`
    Add a memory reference to the value.
    Specified by:
      `addValueReference` in interface `Data`
    Parameters:
      `refAddr` - address referenced.
      `type` - the type of reference to be added.

  - ### removeValueReference

    public void removeValueReference(Address refAddr)
    Description copied from interface: `Data`
    Remove a reference to the value.
    Specified by:
      `removeValueReference` in interface `Data`
    Parameters:
      `refAddr` - address of reference to be removed.

  - ### getComponent

    public Data getComponent(int index)
    Description copied from interface: `Data`
    Returns the immediate n'th component or null if none exists.
    Specified by:
      `getComponent` in interface `Data`
    Parameters:
      `index` - the index of the component to get.
    Returns:
      the component

  - ### getAddress

    public Address getAddress(int opIndex)
    Description copied from interface: `CodeUnit`
    Get the Address for the given operand index if one exists. Data objects have one operand (the value).
    Specified by:
      `getAddress` in interface `CodeUnit`
    Parameters:
      `opIndex` - index of the operand.
    Returns:
      An address if the operand represents a fully qualified address (given the context), or if the operand is a Scalar treated as an address. Null is returned if no address or scalar exists on that operand.

  - ### getByteCodeString

    public String getByteCodeString()

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### getDefaultValueRepresentation

    public String getDefaultValueRepresentation()
    Description copied from interface: `Data`
    Returns a string that represents the data value without markup.
    Specified by:
      `getDefaultValueRepresentation` in interface `Data`
    Returns:
      the string

  - ### getMnemonicString

    public String getMnemonicString()
    Description copied from interface: `CodeUnit`
    Returns the mnemonic for this code unit, e.g., MOV, JMP.
    Specified by:
      `getMnemonicString` in interface `CodeUnit`
    Returns:
      the mnemonic for this code unit, e.g., MOV, JMP

  - ### getNumOperands

    public int getNumOperands()
    Description copied from interface: `CodeUnit`
    Returns the number of operands for this code unit..
    Specified by:
      `getNumOperands` in interface `CodeUnit`
    Returns:
      the number of operands for this code unit.

  - ### getScalar

    public Scalar getScalar(int opIndex)
    Description copied from interface: `CodeUnit`
    Returns the scalar at the given operand index. Data objects have one operand (the value).
    Specified by:
      `getScalar` in interface `CodeUnit`
    Parameters:
      `opIndex` - index of the operand.
    Returns:
      the scalar at the given operand index or null if no scalar exists at that index.

  - ### getBaseDataType

    public DataType getBaseDataType()
    Description copied from interface: `Data`
    If the dataType is a typeDef, then the typeDef's base type is returned, otherwise, the datatType is returned.
    Specified by:
      `getBaseDataType` in interface `Data`
    Returns:
      the data type

  - ### clearSetting

    public void clearSetting(String name)
    Description copied from interface: `Settings`
    Removes any value associated with the given name
    Specified by:
      `clearSetting` in interface `Settings`
    Parameters:
      `name` - the key to remove any association

  - ### getLong

    public Long getLong(String name)
    Description copied from interface: `Settings`
    Gets the Long value associated with the given name
    Specified by:
      `getLong` in interface `Settings`
    Parameters:
      `name` - the key used to retrieve a value
    Returns:
      the Long value for a key

  - ### isChangeAllowed

    public boolean isChangeAllowed(SettingsDefinition settingsDefinition)
    Description copied from interface: `Settings`
    Determine if a settings change corresponding to the specified settingsDefinition is permitted.
    Specified by:
      `isChangeAllowed` in interface `Settings`
    Parameters:
      `settingsDefinition` - settings definition
    Returns:
      true if change permitted else false

  - ### getNames

    public String[] getNames()
    Description copied from interface: `Settings`
    Get this list of keys that currently have values associated with them
    Specified by:
      `getNames` in interface `Settings`
    Returns:
      an array of string keys.

  - ### getString

    public String getString(String name)
    Description copied from interface: `Settings`
    Gets the String value associated with the given name
    Specified by:
      `getString` in interface `Settings`
    Parameters:
      `name` - the key used to retrieve a value
    Returns:
      the String value for a key

  - ### getValue

    public Object getValue(String name)
    Description copied from interface: `Settings`
    Gets the object associated with the given name
    Specified by:
      `getValue` in interface `Settings`
    Parameters:
      `name` - the key used to retrieve a value
    Returns:
      the object associated with a given key

  - ### setLong

    public void setLong(String name, long value)
    Description copied from interface: `Settings`
    Associates the given long value with the name. Note that an attempted setting change may be ignored if prohibited (e.g., immutable Settings, undefined setting name).
    Specified by:
      `setLong` in interface `Settings`
    Parameters:
      `name` - the key
      `value` - the value associated with the key

  - ### setString

    public void setString(String name, String value)
    Description copied from interface: `Settings`
    Associates the given String value with the name. Note that an attempted setting change may be ignored if prohibited (e.g., immutable Settings, undefined setting name).
    Specified by:
      `setString` in interface `Settings`
    Parameters:
      `name` - the key
      `value` - the value associated with the key

  - ### setValue

    public void setValue(String name, Object value)
    Description copied from interface: `Settings`
    Associates the given object with the name. Note that an attempted setting change may be ignored if prohibited (e.g., immutable Settings, undefined setting name).
    Specified by:
      `setValue` in interface `Settings`
    Parameters:
      `name` - the key
      `value` - the value to associate with the key

  - ### getComponent

    public Data getComponent(int[] componentPath)
    Description copied from interface: `Data`
    Get a data item given the index path. Each integer in the array represents an index into the data item at that level.
    Specified by:
      `getComponent` in interface `Data`
    Parameters:
      `componentPath` - the array of indexes to use to find the requested data item.
    Returns:
      the component

  - ### getComponentAt

    @Deprecated public Data getComponentAt(int offset)
    Deprecated.
    Description copied from interface: `Data`
    Return the first immediate child component that contains the byte at the given offset. It is important to note that with certain datatypes there may be more than one component containing the specified offset (see `Data.getComponentsContaining(int)`).
    Specified by:
      `getComponentAt` in interface `Data`
    Parameters:
      `offset` - the amount to add to this data items address to get the address of the requested data item.
    Returns:
      first data component containing offset or null

  - ### getComponentContaining

    public Data getComponentContaining(int offset)
    Description copied from interface: `Data`
    Return the first immediate child component that contains the byte at the given offset. It is important to note that with certain datatypes there may be more than one component containing the specified offset (see `Data.getComponentsContaining(int)`).
    Specified by:
      `getComponentContaining` in interface `Data`
    Parameters:
      `offset` - the amount to add to this data items address to get the
    Returns:
      first data component containing offset or null address of the requested data item.

  - ### getComponentsContaining

    public List<Data> getComponentsContaining(int offset)
    Description copied from interface: `Data`
    Returns a list of all the immediate child components that contain the byte at the given offset.

    For a union, this will return all the components (if the offset is 0). The presence of bit-fields or zero-length components may cause multiple components to be returned.

    Specified by:
      `getComponentsContaining` in interface `Data`
    Parameters:
      `offset` - the amount to add to this data items address to get the address of the requested data item.
    Returns:
      a list of all the immediate child components that contain the byte at the given offset or null if offset is out of bounds.

  - ### getComponentIndex

    public int getComponentIndex()
    Description copied from interface: `Data`
    Get the index of this component in its parent
    Specified by:
      `getComponentIndex` in interface `Data`
    Returns:
      -1 if this data item is not a component of another data item.

  - ### getComponentLevel

    public int getComponentLevel()
    Description copied from interface: `Data`
    Get this data's component level in its hierarchy of components.
    Specified by:
      `getComponentLevel` in interface `Data`
    Returns:
      the level of this data item with 0 being the level of top data items.

  - ### getComponentPath

    public int[] getComponentPath()
    Description copied from interface: `Data`
    Get the component path if this is a component. The component path is an array of integers that represent each index in the tree of data items. Top level data items have an empty array for their component path.
    Specified by:
      `getComponentPath` in interface `Data`
    Returns:
      the path

  - ### getComponentPathName

    public String getComponentPathName()
    Description copied from interface: `Data`
    Returns the component path name (dot notation) for this field
    Specified by:
      `getComponentPathName` in interface `Data`
    Returns:
      the component path name

  - ### getDataType

    public DataType getDataType()
    Description copied from interface: `Data`
    Get the Data type for the data.
    Specified by:
      `getDataType` in interface `Data`
    Returns:
      the data type

  - ### getFieldName

    public String getFieldName()
    Description copied from interface: `Data`
    Get the field name of this data item if it is "inside" another data item, otherwise return null.
    Specified by:
      `getFieldName` in interface `Data`
    Returns:
      the name of this data as known from some parent data item or null if this data item is not a component of another data item.

  - ### getNumComponents

    public int getNumComponents()
    Description copied from interface: `Data`
    Return the number of components that make up this data item. if this is an Array, return the number of elements in the array.
    Specified by:
      `getNumComponents` in interface `Data`
    Returns:
      the number of components

  - ### getParent

    public Data getParent()
    Description copied from interface: `Data`
    Get the immediate parent data item of this data item or null if this data item is not contained in another data item.
    Specified by:
      `getParent` in interface `Data`
    Returns:
      the data

  - ### getParentOffset

    public int getParentOffset()
    Description copied from interface: `Data`
    Get the offset of this Data item from the start of its immediate parent.
    Specified by:
      `getParentOffset` in interface `Data`
    Returns:
      the offset

  - ### getPathName

    public String getPathName()
    Description copied from interface: `Data`
    Returns the full path name (dot notation) for this field. This includes the symbol name at this address.
    Specified by:
      `getPathName` in interface `Data`
    Returns:
      the path name

  - ### getPrimitiveAt

    public Data getPrimitiveAt(int offset)
    Description copied from interface: `Data`
    Returns the primitive component containing this offset (i.e., one that does not have sub-components). This is useful for data items which are made up of multiple layers of other data items. This method immediately goes to the lowest level data item. If the minimum offset of a component is specified, the only first component containing the offset will be considered (e.g., 0-element array).
    Specified by:
      `getPrimitiveAt` in interface `Data`
    Parameters:
      `offset` - the offset
    Returns:
      primitive component containing this offset

  - ### getRoot

    public Data getRoot()
    Description copied from interface: `Data`
    Get the highest level Data item in a hierarchy of structures containing this component.
    Specified by:
      `getRoot` in interface `Data`
    Returns:
      the data

  - ### getRootOffset

    public int getRootOffset()
    Description copied from interface: `Data`
    Get the offset of this Data item from the start of the root data item of some hierarchy of structures.
    Specified by:
      `getRootOffset` in interface `Data`
    Returns:
      the offset

  - ### getValue

    public Object getValue()
    Description copied from interface: `Data`
    Returns the value of this data as determined by the corresponding `DataType`. The value may be an `Address`, `Scalar`, a datatype-defined object or null if no value.
    Specified by:
      `getValue` in interface `Data`
    Returns:
      the value

  - ### getValueClass

    public Class<?> getValueClass()
    Description copied from interface: `Data`
    Get the class used to express the value of this data.

    NOTE: This determination is made based upon data type and settings only and does not examine memory bytes which are used to construct the data value object.

    Specified by:
      `getValueClass` in interface `Data`
    Returns:
      value class or null if a consistent value class is not utilized.

  - ### hasStringValue

    public boolean hasStringValue()
    Description copied from interface: `Data`
    Returns true if this data corresponds to string data. This is determined by the corresponding data type producing a String value.
    Specified by:
      `hasStringValue` in interface `Data`
    Returns:
      true if this data returns a String value and can be treated as string data.

  - ### getValueReferences

    public Reference[] getValueReferences()
    Description copied from interface: `Data`
    Get the references for the value.
    Specified by:
      `getValueReferences` in interface `Data`
    Returns:
      the references

  - ### isArray

    public boolean isArray()
    Description copied from interface: `Data`
    Returns true if this data item is an Array of DataTypes
    Specified by:
      `isArray` in interface `Data`
    Returns:
      true if an array

  - ### isDefined

    public boolean isDefined()
    Description copied from interface: `Data`
    Returns true if the data type is defined. Any address that has not been defined to be code or data is treated as undefined data.
    Specified by:
      `isDefined` in interface `Data`
    Returns:
      true if is defined

  - ### isPointer

    public boolean isPointer()
    Description copied from interface: `Data`
    Returns true if this is a pointer, which implies getValue() will return an Object that is an Address.
    Specified by:
      `isPointer` in interface `Data`
    Returns:
      true if a pointer

  - ### isStructure

    public boolean isStructure()
    Description copied from interface: `Data`
    Returns true if this data item is a Structure.
    Specified by:
      `isStructure` in interface `Data`
    Returns:
      true if a structure

  - ### isDynamic

    public boolean isDynamic()
    Description copied from interface: `Data`
    Returns true if this data item is a dynamic DataType.
    Specified by:
      `isDynamic` in interface `Data`
    Returns:
      true if is dynamic

  - ### isUnion

    public boolean isUnion()
    Description copied from interface: `Data`
    Returns true if this data item is a Union.
    Specified by:
      `isUnion` in interface `Data`
    Returns:
      true if a union

  - ### clearAllSettings

    public void clearAllSettings()
    Description copied from interface: `Settings`
    Removes all name-value pairs from this settings object
    Specified by:
      `clearAllSettings` in interface `Settings`

  - ### isEmpty

    public boolean isEmpty()
    Description copied from interface: `Settings`
    Returns true if there are no key-value pairs stored in this settings object. This is not a reflection of the underlying default settings which may still contain a key-value pair when this settings object is empty.
    Specified by:
      `isEmpty` in interface `Settings`
    Returns:
      true if there are no key-value pairs stored in this settings object

  - ### getDefaultLabelPrefix

    public String getDefaultLabelPrefix(DataTypeDisplayOptions options)
    Description copied from interface: `Data`
    Returns the appropriate string to use as the default label prefix or null if it has no preferred default label prefix;
    Specified by:
      `getDefaultLabelPrefix` in interface `Data`
    Parameters:
      `options` - the options
    Returns:
      the prefix

  - ### equals

    public boolean equals(Object obj)

  - ### isConstant

    public boolean isConstant()
    Description copied from interface: `Data`
    Determine if this data has explicitly been marked as constant. NOTE: This is based upon explicit `Data` and `DataType` mutability settings and does not reflect independent memory block or processor specification settings.
    Specified by:
      `isConstant` in interface `Data`
    Returns:
      true if data is constant, else false.

  - ### isWritable

    public boolean isWritable()
    Description copied from interface: `Data`
    Determine if this data has explicitly been marked as writable. NOTE: This is based upon explicit `Data` and `DataType` mutability settings and does not reflect independent memory block or processor specification settings.
    Specified by:
      `isWritable` in interface `Data`
    Returns:
      true if data is writable, else false.

  - ### isVolatile

    public boolean isVolatile()
    Description copied from interface: `Data`
    Determine if this data has explicitly been marked as volatile. NOTE: This is based upon explicit `Data` and `DataType` mutability settings and does not reflect independent memory block or processor specification settings.
    Specified by:
      `isVolatile` in interface `Data`
    Returns:
      true if data is volatile, else false.

  - ### getDefaultSettings

    public Settings getDefaultSettings()
    Description copied from interface: `Settings`
    Returns the underlying default settings for these settings or null if there are none
    Specified by:
      `getDefaultSettings` in interface `Settings`
    Returns:
      underlying default settings or null

  - ### invalidate

    public void invalidate()
    Invalidate memory buffer

  - ### isValid

    public boolean isValid()

  - ### getAddressString

    public String getAddressString(boolean showBlockName, boolean pad)
    Description copied from interface: `CodeUnit`
    Get the string representation of the starting address for this code unit.
    Specified by:
      `getAddressString` in interface `CodeUnit`
    Parameters:
      `showBlockName` - true if the string should include the memory block name
      `pad` - if true, the address will be padded with leading zeros. Even if pad is false, the string will be padded to make the address string contain at least 4 digits.
    Returns:
      string representation of address

  - ### getLength

    public final int getLength()
    Get the length of the code unit.
    Specified by:
      `getLength` in interface `CodeUnit`
    Returns:
      code unit length

  - ### refreshIfNeeded

    protected void refreshIfNeeded()

  - ### getBytes

    public byte[] getBytes() throws MemoryAccessException
    Gets the bytes for this code unit.
    Specified by:
      `getBytes` in interface `CodeUnit`
    Returns:
      an array of bytes that are in memory at the codeunits address. The array length is the same as the codeUnits length
    Throws:
      `MemoryAccessException` - if the full number of bytes could not be read.

  - ### getBytes

    public int getBytes(byte[] b, int offset)
    Description copied from interface: `MemBuffer`
    Reads `b.length` bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position. The actual number of bytes may be fewer if bytes can't be read.
    Specified by:
      `getBytes` in interface `MemBuffer`
    Parameters:
      `b` - the buffer into which bytes will be placed
      `offset` - the offset in this memory buffer from which to start reading bytes.
    Returns:
      the number of bytes read which may be fewer than b.length if available bytes are exhausted or no bytes are available at the specified offset.

  - ### getBytesInCodeUnit

    public void getBytesInCodeUnit(byte[] buffer, int bufferOffset) throws MemoryAccessException
    Description copied from interface: `CodeUnit`
    Copies max(buffer.length, code unit length) bytes into buffer starting at the given offset in `buffer`.
    Specified by:
      `getBytesInCodeUnit` in interface `CodeUnit`
    Parameters:
      `buffer` - byte array to copy into
      `bufferOffset` - offset in byte array the copy will start
    Throws:
      `MemoryAccessException` - if the full number of bytes could not be read.

  - ### isBigEndian

    public boolean isBigEndian()
    Description copied from interface: `MemBuffer`
    Returns true if the underlying bytes are in big-endian order, false if they are little endian.
    Specified by:
      `isBigEndian` in interface `MemBuffer`
    Returns:
      true if the underlying bytes are in big-endian order, false if they are little endian.

  - ### getShort

    public short getShort(int offset) throws MemoryAccessException
    Description copied from interface: `MemBuffer`
    returns the short at the given offset, taking into account the endianness.
    Specified by:
      `getShort` in interface `MemBuffer`
    Parameters:
      `offset` - the offset from the membuffers origin (the address that it is set at)
    Returns:
      the short at the given offset, taking into account the endianness.
    Throws:
      `MemoryAccessException` - if a 2-byte short value cannot be read at the specified offset

  - ### getInt

    public int getInt(int offset) throws MemoryAccessException
    Description copied from interface: `MemBuffer`
    returns the int at the given offset, taking into account the endianness.
    Specified by:
      `getInt` in interface `MemBuffer`
    Parameters:
      `offset` - the offset from the membuffers origin (the address that it is set at)
    Returns:
      the int at the given offset, taking into account the endianness.
    Throws:
      `MemoryAccessException` - if a 4-byte integer value cannot be read at the specified offset

  - ### getLong

    public long getLong(int offset) throws MemoryAccessException
    Description copied from interface: `MemBuffer`
    returns the long at the given offset, taking into account the endianness.
    Specified by:
      `getLong` in interface `MemBuffer`
    Parameters:
      `offset` - the offset from the membuffers origin (the address that it is set at)
    Returns:
      the long at the given offset, taking into account the endianness.
    Throws:
      `MemoryAccessException` - if a 8-byte long value cannot be read at the specified offset

  - ### getBigInteger

    public BigInteger getBigInteger(int offset, int size, boolean signed) throws MemoryAccessException
    Description copied from interface: `MemBuffer`
    returns the value at the given offset, taking into account the endianness.
    Specified by:
      `getBigInteger` in interface `MemBuffer`
    Parameters:
      `offset` - the offset from the membuffers origin (the address that it is set at)
      `size` - the number of bytes to include in the value
      `signed` - true if value should be treated as a signed twos-compliment value.
    Returns:
      the value at the given offset, taking into account the endianness.
    Throws:
      `MemoryAccessException` - if the request size value cannot be read at the specified offset

  - ### setProperty

    public void setProperty(String name, Saveable value)
    Set the property name with the given value for this code unit.
    Specified by:
      `setProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property to save.
      `value` - the value of the property to save.
    Throws:
      `TypeMismatchException` - if the property manager for name does not support object types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### setProperty

    public void setProperty(String name, String value)
    Set the property name with the given value for this code unit.
    Specified by:
      `setProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property to save.
      `value` - the value of the property to save.
    Throws:
      `TypeMismatchException` - if the property manager for name does not support string types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### setProperty

    public void setProperty(String name, int value)
    Set the property name with the given value for this code unit.
    Specified by:
      `setProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property to save.
      `value` - the value of the property to save.
    Throws:
      `TypeMismatchException` - if the property manager for name does not support int types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### setProperty

    public void setProperty(String name)
    Mark the property name as having a value for this code unit.
    Specified by:
      `setProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property to save.
    Throws:
      `TypeMismatchException` - if the property manager for name does not support void types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getObjectProperty

    public Saveable getObjectProperty(String name)
    Get the object property for name; returns null if there is no name property for this code unit.
    Specified by:
      `getObjectProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property.
    Returns:
      `Saveable` property value, with map-specific implementation class, or null.
    Throws:
      `TypeMismatchException` - if the property manager for name does not support object types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getStringProperty

    public String getStringProperty(String name)
    Get the string property for name; returns null if there is no name property for this code unit.
    Specified by:
      `getStringProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property.
    Returns:
      string property value or null
    Throws:
      `TypeMismatchException` - if the property manager for name does not support string types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getIntProperty

    public int getIntProperty(String name) throws NoValueException
    Get the int property for name.
    Specified by:
      `getIntProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property.
    Returns:
      integer property value property has been set
    Throws:
      `NoValueException` - if there is not name property for this code unit
      `TypeMismatchException` - if the property manager for name does not support int types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### hasProperty

    public boolean hasProperty(String name)
    Description copied from interface: `PropertySet`
    Returns true if the codeunit has the given property defined. This method works for all property map types.
    Specified by:
      `hasProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property
    Returns:
      true if property has been set, else false

  - ### getVoidProperty

    public boolean getVoidProperty(String name)
    Returns whether this code unit is marked as having the name property.
    Specified by:
      `getVoidProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property.
    Returns:
      true if property has been set, else false
    Throws:
      `TypeMismatchException` - if the property manager for name does not support void types
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### propertyNames

    public Iterator<String> propertyNames()
    Description copied from interface: `PropertySet`
    Get an iterator over the property names which have values applied.
    Specified by:
      `propertyNames` in interface `PropertySet`
    Returns:
      iterator of all property map names which have values applied

  - ### removeProperty

    public void removeProperty(String name)
    Remove the property value with the given name for this code unit.
    Specified by:
      `removeProperty` in interface `PropertySet`
    Parameters:
      `name` - the name of the property.

  - ### getLabel

    @Deprecated public String getLabel()
    Deprecated.
    Get the label for this code unit.
    Specified by:
      `getLabel` in interface `CodeUnit`
    Returns:
      the label for this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getSymbols

    public Symbol[] getSymbols()
    Get the symbols for this code unit.
    Specified by:
      `getSymbols` in interface `CodeUnit`
    Returns:
      the Symbols for this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getPrimarySymbol

    public Symbol getPrimarySymbol()
    Get the primary Symbol for this code unit.
    Specified by:
      `getPrimarySymbol` in interface `CodeUnit`
    Returns:
      the Primary Symbol for this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getMinAddress

    public Address getMinAddress()
    Get the starting address for this code unit.
    Specified by:
      `getMinAddress` in interface `CodeUnit`
    Returns:
      the starting address for this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getMaxAddress

    public Address getMaxAddress()
    Get the ending address for this code unit.
    Specified by:
      `getMaxAddress` in interface `CodeUnit`
    Returns:
      the ending address for this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getNextCodeUnit

    public CodeUnit getNextCodeUnit()
    Returns the code unit after this code unit..
    Returns:
      the code unit after this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getPreviousCodeUnit

    public CodeUnit getPreviousCodeUnit()
    Returns the code unit before this code unit..
    Returns:
      the code unit before this code unit.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getComment

    public String getComment(CommentType commentType)
    Description copied from interface: `CodeUnit`
    Get the comment for the given type
    Specified by:
      `getComment` in interface `CodeUnit`
    Parameters:
      `commentType` - `comment type`
    Returns:
      the comment string of the appropriate type or null if no comment of that type exists for this code unit

  - ### getCommentAsArray

    public String[] getCommentAsArray(CommentType commentType)
    Get the comment as an array where each element is a single line for the given type.
    Specified by:
      `getCommentAsArray` in interface `CodeUnit`
    Parameters:
      `commentType` - must be either EOL_COMMENT_TYPE, PRE_COMMENT_TYPE, POST_COMMENT_TYPE, or PLATE_COMMENT_TYPE
    Returns:
      an array of strings where each item in the array is a line of text in the comment. If there is no comment of the requested type, an empty array is returned.
    Throws:
      `IllegalArgumentException` - if type is not one of the three types of comments supported
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### setCommentAsArray

    public void setCommentAsArray(CommentType commentType, String[] comment)
    Set the comment for the given type.
    Specified by:
      `setCommentAsArray` in interface `CodeUnit`
    Parameters:
      `commentType` - must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENT
      `comment` - the lines that make up the comment
    Throws:
      `IllegalArgumentException` - if type is not one of the three types of comments supported
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### setComment

    public void setComment(CommentType commentType, String comment)
    Set the comment for the given type.
    Specified by:
      `setComment` in interface `CodeUnit`
    Parameters:
      `commentType` - must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENT
      `comment` - the comment
    Throws:
      `IllegalArgumentException` - if type is not one of the three types of comments supported
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### contains

    public boolean contains(Address testAddr)
    Determines if this code unit contains the indicated address.
    Specified by:
      `contains` in interface `CodeUnit`
    Parameters:
      `testAddr` - the address to test
    Returns:
      true if address is contained in the range.
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### compareTo

    public int compareTo(Address a)
    Compares the given address to the address range of this node.
    Specified by:
      `compareTo` in interface `CodeUnit`
    Parameters:
      `a` - the address
    Returns:
      a negative integer if addr is greater than the maximum range address zero if addr is in the range a positive integer if addr is less than minimum range address
    Throws:
      `ConcurrentModificationException` - if this object is no longer valid.

  - ### getByte

    public byte getByte(int offset) throws MemoryAccessException
    Get one byte from memory at the current position plus offset.
    Specified by:
      `getByte` in interface `MemBuffer`
    Parameters:
      `offset` - the displacement from the current position.
    Returns:
      the data at offset from the current position.
    Throws:
      `AddressOutOfBoundsException` - if offset exceeds address space
      `IndexOutOfBoundsException` - if offset is negative
      `MemoryAccessException` - if memory cannot be read

  - ### getAddress

    public Address getAddress()
    Get the Address which corresponds to the offset 0.
    Specified by:
      `getAddress` in interface `MemBuffer`
    Returns:
      the current address of offset 0.

  - ### getMemory

    public Memory getMemory()
    Get the Memory object actually used by the MemBuffer. return the Memory used by this MemBuffer.
    Specified by:
      `getMemory` in interface `MemBuffer`
    Returns:
      the Memory used by this MemBuffer or null if not available.

  - ### addMnemonicReference

    public void addMnemonicReference(Address refAddr, RefType refType, SourceType sourceType)
    Add a reference to the mnemonic for this code unit.
    Specified by:
      `addMnemonicReference` in interface `CodeUnit`
    Parameters:
      `refAddr` - address of reference to add
      `refType` - type of reference being added
      `sourceType` - the source of this reference

  - ### getMnemonicReferences

    public Reference[] getMnemonicReferences()
    Get references for the mnemonic for this instruction.
    Specified by:
      `getMnemonicReferences` in interface `CodeUnit`
    Returns:
      an array of memory references. A zero length array will be returned if there are no references for the mnemonic.

  - ### removeMnemonicReference

    public void removeMnemonicReference(Address refAddr)
    Remove a reference to the mnemonic for this instruction.
    Specified by:
      `removeMnemonicReference` in interface `CodeUnit`
    Parameters:
      `refAddr` - the address to remove as a reference.

  - ### addOperandReference

    public void addOperandReference(int opIndex, Address refAddr, RefType type, SourceType sourceType)
    Add a user defined reference to the operand at the given index.
    Specified by:
      `addOperandReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - operand index
      `refAddr` - reference address
      `type` - the reference type to be added.
      `sourceType` - the source of this reference
    See Also:
      - `CodeUnit.addOperandReference(int, Address, RefType, SourceType)`

  - ### getOperandReferences

    public Reference[] getOperandReferences(int opIndex)
    Get the references for the operand index. If the operand type is a register, then the user defined references are returned; otherwise an array with the address for the operand value is returned.
    Specified by:
      `getOperandReferences` in interface `CodeUnit`
    Parameters:
      `opIndex` - operand index (0 is the first operand)
    Returns:
      the references for the operand index.

  - ### removeOperandReference

    public void removeOperandReference(int opIndex, Address refAddr)
    Remove a user defined reference to the operand at opIndex.
    Specified by:
      `removeOperandReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - operand index
      `refAddr` - address referencing the operand

  - ### getReferencesFrom

    public Reference[] getReferencesFrom()
    Get ALL reference FROM this code unit.
    Specified by:
      `getReferencesFrom` in interface `CodeUnit`
    Returns:
      an array of memory references from this codeUnit or an empty array if there are no references.

  - ### setExternalReference

    public void setExternalReference(Reference ref)

  - ### setMemoryReference

    public void setMemoryReference(int opIndex, Address refAddr, RefType refType)

  - ### setStackReference

    public void setStackReference(int opIndex, int offset, SourceType sourceType, RefType refType)
    Description copied from interface: `CodeUnit`
    Sets a stack reference at the `offset` on the specified operand index, which effectively substitutes the previous operation interpretation
    NOTE: If another reference was previously set on the operand, then it will be replaced with this stack reference
    Specified by:
      `setStackReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - the index of the operand to set this stack reference
      `offset` - the (+/-) offset from stack base address
      `sourceType` - the source of this reference
      `refType` - type of reference, RefType.READ,WRITE,PTR...

  - ### setRegisterReference

    public void setRegisterReference(int opIndex, Register reg, SourceType sourceType, RefType refType)
    Description copied from interface: `CodeUnit`
    Sets a register reference at the `offset` on the specified operand index, which effectively substitutes the previous operation interpretation
    NOTE: If another reference was previously set on the operand, then it will be replaced with this register reference
    Specified by:
      `setRegisterReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - the index of the operand to set this register reference
      `reg` - a register
      `sourceType` - the source of this reference
      `refType` - type of reference, RefType.READ,WRITE,PTR...

  - ### getPrimaryReference

    public Reference getPrimaryReference(int index)
    Description copied from interface: `CodeUnit`
    Returns the primary reference for the operand index..
    Specified by:
      `getPrimaryReference` in interface `CodeUnit`
    Parameters:
      `index` - operand index (0 is the first operand)
    Returns:
      the primary reference for the operand index.

  - ### setPrimaryMemoryReference

    public void setPrimaryMemoryReference(Reference ref)
    Description copied from interface: `CodeUnit`
    Sets a memory reference to be the primary reference at its address/opIndex location. The primary reference is the one that is used in the getOperandRepresentation() method.
    Specified by:
      `setPrimaryMemoryReference` in interface `CodeUnit`
    Parameters:
      `ref` - the reference to be set as primary.

  - ### getStackReference

    public StackReference getStackReference(int opIndex)

  - ### removeStackReference

    public void removeStackReference(int opIndex)

  - ### getExternalReference

    public ExternalReference getExternalReference(int opIndex)
    Description copied from interface: `CodeUnit`
    Gets the external reference (if any) at the opIndex
    Specified by:
      `getExternalReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - the operand index to look for external references
    Returns:
      the external reference at the operand or null if none exists.

  - ### removeExternalReference

    public void removeExternalReference(int opIndex)
    Description copied from interface: `CodeUnit`
    Remove external reference (if any) at the given opIndex
    Specified by:
      `removeExternalReference` in interface `CodeUnit`
    Parameters:
      `opIndex` - the index of the operand from which to remove any external reference.

  - ### getReferenceIteratorTo

    public ReferenceIterator getReferenceIteratorTo()
    Description copied from interface: `CodeUnit`
    Returns an iterator over all references TO this code unit..
    Specified by:
      `getReferenceIteratorTo` in interface `CodeUnit`
    Returns:
      an iterator over all references TO this code unit.

  - ### getProgram

    public Program getProgram()
    Description copied from interface: `CodeUnit`
    Returns the program that generated this CodeUnit..
    Specified by:
      `getProgram` in interface `CodeUnit`
    Returns:
      the program that generated this CodeUnit.

  - ### hashCode

    public int hashCode()
    Overrides:
      `hashCode` in class `Object`