Package ghidra.program.model.data

# Class AbstractPointerTypedefBuiltIn

java.lang.Object
ghidra.program.model.data.AbstractDataType
ghidra.program.model.data.DataTypeImpl
ghidra.program.model.data.BuiltIn
ghidra.program.model.data.AbstractPointerTypedefBuiltIn

All Implemented Interfaces:
  `BuiltInDataType`, `DataType`, `TypeDef`, `ExtensionPoint`

Direct Known Subclasses:
  `IBO32DataType`, `IBO64DataType`

public abstract class AbstractPointerTypedefBuiltIn extends BuiltIn implements TypeDef
`AbstractPointerTypedefDataType` provides an abstract `BuiltIn` datatype implementation for a pointer-typedef datatype.

- ## Field Summary

  ### Fields inherited from class ghidra.program.model.data.DataTypeImpl

  `defaultSettings`

  ### Fields inherited from class ghidra.program.model.data.AbstractDataType

  `categoryPath, dataMgr, EMPTY_TYPEDEF_DEFINITIONS, name`

  ### Fields inherited from interface ghidra.program.model.data.DataType

  `CONFLICT_SUFFIX, DEFAULT, NO_LAST_CHANGE_TIME, NO_SOURCE_SYNC_TIME, TYPEDEF_ATTRIBUTE_PREFIX, TYPEDEF_ATTRIBUTE_SUFFIX, VOID`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractPointerTypedefBuiltIn(String name, DataType referencedDataType, int pointerSize, DataTypeManager dtm)`
  Constructs a pointer-typedef.
  `protected`
  `AbstractPointerTypedefBuiltIn(String name, Pointer pointerDataType, DataTypeManager dtm)`
  Constructs a pointer-typedef.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `dependsOn(DataType dt)`
  Check if this datatype depends on the existence of the given datatype.
  `void`
  `enableAutoNaming()`
  Enable auto-naming for this typedef.
  `int`
  `getAlignedLength()`
  Get the aligned-length of this datatype as a number of 8-bit bytes.
  `DataType`
  `getBaseDataType()`
  Returns the non-typedef dataType that this typedef is based on, following chains of typedefs as necessary.
  `SettingsDefinition[]`
  `getBuiltInSettingsDefinitions()`
  Gets a list of all the settingsDefinitions used by this datatype.
  `DataType`
  `getDataType()`
  Returns the dataType that this typedef is based on.
  `int`
  `getLength()`
  Get the length of this DataType as a number of 8-bit bytes.
  `String`
  `getName()`
  Get the name of this datatype.
  `protected DataType`
  `getReferencedDataType()`
  Get the referenced datatype used to construct this datatype (datatype which pointer references).
  `String`
  `getRepresentation(MemBuffer buf, Settings settings, int length)`
  Get bytes from memory in a printable format for this type.
  `UniversalID`
  `getUniversalID()`
  Get the universal ID for this datatype.
  `Object`
  `getValue(MemBuffer buf, Settings settings, int length)`
  Returns the interpreted data value as an instance of the `advertised value class`.
  `Class<?>`
  `getValueClass(Settings settings)`
  Get the Class of the value Object to be returned by this datatype (see `DataType.getValue(MemBuffer, Settings, int)`).
  `protected boolean`
  `hasGeneratedNamed()`
  `boolean`
  `hasLanguageDependantLength()`
  Indicates if the length of this data-type is determined based upon the `DataOrganization` obtained from the associated `DataTypeManager`.
  `boolean`
  `isAutoNamed()`
  Determine if this datatype use auto-naming (e.g., see `PointerTypedef`).
  `boolean`
  `isEquivalent(DataType obj)`
  Check if the given datatype is equivalent to this datatype.
  `String`
  `toString()`

  ### Methods inherited from class ghidra.program.model.data.BuiltIn

  `addParent, copy, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getDecompilerDisplayName, getLastChangeTime, getSettingsDefinitions, removeParent, setDefaultSettings`

  ### Methods inherited from class ghidra.program.model.data.DataTypeImpl

  `equals, getAlignment, getDefaultSettings, getLastChangeTimeInSourceArchive, getParents, getSourceArchive, hashCode, notifyAlignmentChanged, notifyDeleted, notifyNameChanged, notifyParents, notifyReplaced, notifySizeChanged, replaceWith, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setSourceArchive`

  ### Methods inherited from class ghidra.program.model.data.AbstractDataType

  `dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, encodeRepresentation, encodeValue, getCategoryPath, getDataOrganization, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDisplayName, getMnemonic, getPathName, getTypeDefSettingsDefinitions, isDeleted, isEncodable, isNotYetDefined, isZeroLength, setCategoryPath, setName, setNameAndCategory`

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

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

  ### Methods inherited from interface ghidra.program.model.data.DataType

  `addParent, clone, copy, dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, encodeRepresentation, encodeValue, getAlignment, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDefaultSettings, getDescription, getDisplayName, getLastChangeTime, getLastChangeTimeInSourceArchive, getMnemonic, getParents, getPathName, getSettingsDefinitions, getSourceArchive, getTypeDefSettingsDefinitions, isDeleted, isEncodable, isNotYetDefined, isZeroLength, removeParent, replaceWith, setCategoryPath, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setName, setNameAndCategory, setSourceArchive`

  ### Methods inherited from interface ghidra.program.model.data.TypeDef

  `hasSameTypeDefSettings, isPointer`

- ## Constructor Details

  - ### AbstractPointerTypedefBuiltIn

    protected AbstractPointerTypedefBuiltIn(String name, DataType referencedDataType, int pointerSize, DataTypeManager dtm)
    Constructs a pointer-typedef. The category path will match that of the referencedDataType. Subclass may set various default settings which correspond to `PointerTypeSettingsDefinition`.
    Parameters:
      `name` - name of this pointer-typedef or null to force auto-name generation.
      `referencedDataType` - data type this pointer points to
      `pointerSize` - pointer size in bytes or -1 for default pointer size
      `dtm` - data-type manager whose data organization should be used

  - ### AbstractPointerTypedefBuiltIn

    protected AbstractPointerTypedefBuiltIn(String name, Pointer pointerDataType, DataTypeManager dtm)
    Constructs a pointer-typedef. The category path will match that of the pointerDataType. Subclass may set various default settings which correspond to `PointerTypeSettingsDefinition`.
    Parameters:
      `name` - name of this pointer-typedef or null to force auto-name generation.
      `pointerDataType` - associated pointer datatype (required)
      `dtm` - data-type manager whose data organization should be used

- ## Method Details

  - ### enableAutoNaming

    public void enableAutoNaming()
    Description copied from interface: `TypeDef`
    Enable auto-naming for this typedef. This will force naming to reflect the name of associated datatype plus an attribute list which corresponds to any `TypeDefSettingsDefinition` settings which may be set.
    Specified by:
      `enableAutoNaming` in interface `TypeDef`

  - ### isAutoNamed

    public boolean isAutoNamed()
    Description copied from interface: `TypeDef`
    Determine if this datatype use auto-naming (e.g., see `PointerTypedef`). If true, any change to associated `TypeDefSettingsDefinition` settings or naming of the pointer-referenced datatype will cause a automatic renaming of this datatype.
    Specified by:
      `isAutoNamed` in interface `TypeDef`
    Returns:
      true if auto-named, else false.

  - ### getReferencedDataType

    protected DataType getReferencedDataType()
    Get the referenced datatype used to construct this datatype (datatype which pointer references).
    Returns:
      referenced datatype

  - ### getUniversalID

    public UniversalID getUniversalID()
    Description copied from interface: `DataType`
    Get the universal ID for this datatype.

    This value is intended to be a unique identifier across all programs and archives. The same ID indicates that two datatypes were originally the same one. Keep in mind names, categories, and component makeup may differ and have changed since there origin.

    Specified by:
      `getUniversalID` in interface `DataType`
    Overrides:
      `getUniversalID` in class `BuiltIn`
    Returns:
      datatype UniversalID

  - ### hasGeneratedNamed

    protected boolean hasGeneratedNamed()

  - ### isEquivalent

    public boolean isEquivalent(DataType obj)
    Description copied from interface: `DataType`
    Check if the given datatype is equivalent to this datatype.

    The precise meaning of "equivalent" is datatype dependent.
    NOTE: if invoked by a DB object or manager it should be invoked on the DataTypeDB object passing the other datatype as the argument.

    Specified by:
      `isEquivalent` in interface `DataType`
    Overrides:
      `isEquivalent` in class `BuiltIn`
    Parameters:
      `obj` - the datatype being tested for equivalence.
    Returns:
      true if the if the given datatype is equivalent to this datatype.

  - ### getName

    public String getName()
    Description copied from interface: `DataType`
    Get the name of this datatype.
    Specified by:
      `getName` in interface `DataType`
    Overrides:
      `getName` in class `AbstractDataType`
    Returns:
      the name

  - ### hasLanguageDependantLength

    public boolean hasLanguageDependantLength()
    Description copied from interface: `DataType`
    Indicates if the length of this data-type is determined based upon the `DataOrganization` obtained from the associated `DataTypeManager`.
    Specified by:
      `hasLanguageDependantLength` in interface `DataType`
    Overrides:
      `hasLanguageDependantLength` in class `AbstractDataType`
    Returns:
      true length is language/compiler-specification dependent, else false

  - ### getLength

    public int getLength()
    Description copied from interface: `DataType`
    Get the length of this DataType as a number of 8-bit bytes.

    For primitive datatypes this reflects the smallest varnode which can be used to contain its value (i.e., raw data length).

    Example: For x86 32-bit gcc an 80-bit `long double` `raw data length` of 10-bytes will fit within a floating point register while its `aligned-length` of 12-bytes is used by the gcc compiler for data/array/component allocations to maintain alignment (i.e., `sizeof(long double)` ).

    NOTE: Other than the `VoidDataType`, no datatype should ever return 0, even if `DataType.isZeroLength()`, and only `Dynamic`/`FactoryDataType` datatypes should return -1. If `DataType.isZeroLength()` is true a length of 1 should be returned. Where a zero-length datatype can be handled (e.g., `Composite`) the `DataType.isZeroLength()` method should be used.

    Specified by:
      `getLength` in interface `DataType`
    Returns:
      the length of this DataType

  - ### getAlignedLength

    public int getAlignedLength()
    Description copied from interface: `DataType`
    Get the aligned-length of this datatype as a number of 8-bit bytes.

    For primitive datatypes this is equivalent to the C/C++ "sizeof" operation within source code and should be used when determining `Array` element length or component sizing for a `Composite`. For `Pointer`, `Composite` and `Array` types this will return the same value as `DataType.getLength()`.

    Example: For x86 32-bit gcc an 80-bit `long double` `raw data length` of 10-bytes will fit within a floating point register while its `aligned-length` of 12-bytes is used by the gcc compiler for data/array/component allocations to maintain alignment (i.e., `sizeof(long double)` ).

    NOTE: Other than the `VoidDataType`, no datatype should ever return 0, even if `DataType.isZeroLength()`, and only `Dynamic` / `FactoryDataType` / `FunctionDefinition` datatypes should return -1. If `DataType.isZeroLength()` is true a length of 1 should be returned.

    Specified by:
      `getAlignedLength` in interface `DataType`
    Overrides:
      `getAlignedLength` in class `DataTypeImpl`
    Returns:
      byte length of binary encoding.

  - ### getDataType

    public DataType getDataType()
    Description copied from interface: `TypeDef`
    Returns the dataType that this typedef is based on. This could be another typedef
    Specified by:
      `getDataType` in interface `TypeDef`
    Returns:
      the datatype which this typedef is based on (may be another `TypeDef`).

  - ### getBaseDataType

    public DataType getBaseDataType()
    Description copied from interface: `TypeDef`
    Returns the non-typedef dataType that this typedef is based on, following chains of typedefs as necessary.
    Specified by:
      `getBaseDataType` in interface `TypeDef`
    Returns:
      the datatype which this typedef is based on (will not be another `TypeDef`).

  - ### getBuiltInSettingsDefinitions

    public SettingsDefinition[] getBuiltInSettingsDefinitions()
    Description copied from class: `BuiltIn`
    Gets a list of all the settingsDefinitions used by this datatype.
    Overrides:
      `getBuiltInSettingsDefinitions` in class `BuiltIn`
    Returns:
      a list of the settingsDefinitions used by this datatype.

  - ### dependsOn

    public boolean dependsOn(DataType dt)
    Description copied from interface: `DataType`
    Check if this datatype depends on the existence of the given datatype.

    For example byte[] depends on byte. If byte were deleted, then byte[] would also be deleted.

    Specified by:
      `dependsOn` in interface `DataType`
    Overrides:
      `dependsOn` in class `AbstractDataType`
    Parameters:
      `dt` - the datatype to test that this datatype depends on.
    Returns:
      true if the existence of this datatype relies on the existence of the specified datatype dt.

  - ### toString

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

  - ### getValueClass

    public Class<?> getValueClass(Settings settings)
    Description copied from interface: `DataType`
    Get the Class of the value Object to be returned by this datatype (see `DataType.getValue(MemBuffer, Settings, int)`).
    Specified by:
      `getValueClass` in interface `DataType`
    Overrides:
      `getValueClass` in class `DataTypeImpl`
    Parameters:
      `settings` - the relevant settings to use or null for default.
    Returns:
      Class of the value to be returned by this datatype or null if it can vary or is unspecified. Types which correspond to a string or char array will return the String class.

  - ### getValue

    public Object getValue(MemBuffer buf, Settings settings, int length)
    Description copied from interface: `DataType`
    Returns the interpreted data value as an instance of the `advertised value class`.

    For instance, `Pointer` data types should return an Address object (or null), or integer data types should return a `Scalar` object.

    Specified by:
      `getValue` in interface `DataType`
    Parameters:
      `buf` - the data buffer
      `settings` - the settings to use.
      `length` - indicates the maximum number of bytes that may be consumed by a `Dynamic` datatype, otherwise this value is ignored. A value of -1 may be specified to allow a Dynamic datatype to determine the length based upon the actual data bytes
    Returns:
      the data object, or null if data is invalid

  - ### getRepresentation

    public String getRepresentation(MemBuffer buf, Settings settings, int length)
    Description copied from interface: `DataType`
    Get bytes from memory in a printable format for this type.
    Specified by:
      `getRepresentation` in interface `DataType`
    Parameters:
      `buf` - the data.
      `settings` - the settings to use for the representation.
      `length` - the number of bytes to represent.
    Returns:
      the representation of the data in this format, never null.