Package ghidra.program.model.data

# Class PointerDataType

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

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

Direct Known Subclasses:
  `Pointer16DataType`, `Pointer24DataType`, `Pointer32DataType`, `Pointer40DataType`, `Pointer48DataType`, `Pointer56DataType`, `Pointer64DataType`, `Pointer8DataType`

public class PointerDataType extends BuiltIn implements Pointer
Basic implementation for a pointer dataType

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final PointerDataType`
  `dataType`
  `protected int`
  `length`
  `static final int`
  `MAX_POINTER_SIZE_BYTES`
  `static final String`
  `NOT_A_POINTER`
  `static final String`
  `POINTER_LABEL_PREFIX`
  `static final String`
  `POINTER_LABEL_PREFIX_U`
  `static final String`
  `POINTER_LOOP_LABEL`
  `static final String`
  `POINTER_NAME`
  `protected DataType`
  `referencedDataType`

  ### 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`

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

  `NaP`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PointerDataType()`
  Creates a dynamically-sized default pointer data type.
  `PointerDataType(DataType referencedDataType)`
  Construct a dynamically-sized pointer to a referencedDataType A dynamic pointer size of 4-bytes will be in used, but will adapt to a data type manager's data organization when resolved.
  `PointerDataType(DataTypeManager dtm)`
  Creates a dynamically-sized default pointer data type.
  `PointerDataType(DataType referencedDataType, int length)`
  Construct a pointer of a specified length to a referencedDataType.
  `PointerDataType(DataType referencedDataType, int length, DataTypeManager dtm)`
  Construct a pointer of a specified length to a referencedDataType.
  `PointerDataType(DataType referencedDataType, DataTypeManager dtm)`
  Construct a dynamically-sized pointer to the given data type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final Pointer`
  `clone(DataTypeManager dtm)`
  Returns an instance of this DataType using the specified `DataTypeManager` to allow its use of the corresponding `DataOrganization` while retaining its unique identity (see `DataType.getUniversalID()` and archive association (see `DataType.getSourceArchive()`) if applicable.
  `void`
  `dataTypeDeleted(DataType dt)`
  Informs this datatype that the given datatype has been deleted.
  `void`
  `dataTypeNameChanged(DataType dt, String oldName)`
  Informs this datatype that its name has changed from the indicated old name.
  `void`
  `dataTypeReplaced(DataType oldDt, DataType newDt)`
  Informs this datatype that the given oldDT has been replaced with newDT
  `boolean`
  `dependsOn(DataType dt)`
  Check if this datatype depends on the existence of the given datatype.
  `static Address`
  `getAddressValue(MemBuffer buf, int size, Settings settings)`
  Generate an address value based upon bytes stored at the specified buf location.
  `static Address`
  `getAddressValue(MemBuffer buf, int size, Settings settings, Consumer<String> errorHandler)`
  Generate an address value based upon bytes stored at the specified buf location.
  `static Address`
  `getAddressValue(MemBuffer buf, int size, AddressSpace targetSpace)`
  Generate an address value based upon bytes stored at the specified buf location.
  `int`
  `getAlignedLength()`
  Get the aligned-length of this datatype as a number of 8-bit bytes.
  `CategoryPath`
  `getCategoryPath()`
  Gets the categoryPath associated with this datatype
  `DataType`
  `getDataType()`
  Returns the "pointed to" dataType
  `String`
  `getDefaultLabelPrefix()`
  Returns the appropriate string to use as the default label prefix in the absence of any data.
  `String`
  `getDefaultLabelPrefix(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options)`
  Returns the appropriate string to use as the default label prefix.
  `String`
  `getDescription()`
  Get a String briefly describing this DataType.
  `String`
  `getDisplayName()`
  Gets the name for referring to this datatype.
  `static String`
  `getLabelString(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options)`
  `int`
  `getLength()`
  Get the length of this DataType as a number of 8-bit bytes.
  `String`
  `getMnemonic(Settings settings)`
  Get the mnemonic for this DataType.
  `String`
  `getName()`
  Get the name of this datatype.
  `static Pointer`
  `getPointer(DataType dt, int pointerSize)`
  Get a pointer data-type instance of the requested size.
  `static Pointer`
  `getPointer(DataType dt, DataTypeManager dtm)`
  Get a pointer data-type instance with a default size
  `String`
  `getRepresentation(MemBuffer buf, Settings settings, int len)`
  Get bytes from memory in a printable format for this type.
  `TypeDefSettingsDefinition[]`
  `getTypeDefSettingsDefinitions()`
  Get the list of all settings definitions for this datatype that may be used for an associated `TypeDef`.
  `Object`
  `getValue(MemBuffer buf, Settings settings, int len)`
  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)`).
  `boolean`
  `hasLanguageDependantLength()`
  Indicates if the length of this data-type is determined based upon the `DataOrganization` obtained from the associated `DataTypeManager`.
  `boolean`
  `isDeleted()`
  Returns true if this datatype has been deleted and is no longer valid
  `boolean`
  `isEquivalent(DataType dt)`
  Check if the given datatype is equivalent to this datatype.
  `Pointer`
  `newPointer(DataType dt)`
  Creates a pointer to the indicated data type.
  `String`
  `toString()`

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

  `addParent, copy, getBuiltInSettingsDefinitions, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getDecompilerDisplayName, getLastChangeTime, getSettingsDefinitions, getUniversalID, 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, dataTypeSizeChanged, encodeRepresentation, encodeValue, getDataOrganization, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultOffcutLabelPrefix, getPathName, 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, copy, dataTypeAlignmentChanged, dataTypeSizeChanged, encodeRepresentation, encodeValue, getAlignment, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultOffcutLabelPrefix, getDefaultSettings, getLastChangeTime, getLastChangeTimeInSourceArchive, getParents, getPathName, getSettingsDefinitions, getSourceArchive, getUniversalID, isEncodable, isNotYetDefined, isZeroLength, removeParent, replaceWith, setCategoryPath, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setName, setNameAndCategory, setSourceArchive`

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

  `typedefBuilder`

- ## Field Details

  - ### dataType

    public static final PointerDataType dataType

  - ### MAX_POINTER_SIZE_BYTES

    public static final int MAX_POINTER_SIZE_BYTES
    See Also:
      - Constant Field Values

  - ### POINTER_NAME

    public static final String POINTER_NAME
    See Also:
      - Constant Field Values

  - ### POINTER_LABEL_PREFIX

    public static final String POINTER_LABEL_PREFIX
    See Also:
      - Constant Field Values

  - ### POINTER_LABEL_PREFIX_U

    public static final String POINTER_LABEL_PREFIX_U
    See Also:
      - Constant Field Values

  - ### POINTER_LOOP_LABEL

    public static final String POINTER_LOOP_LABEL
    See Also:
      - Constant Field Values

  - ### NOT_A_POINTER

    public static final String NOT_A_POINTER
    See Also:
      - Constant Field Values

  - ### referencedDataType

    protected DataType referencedDataType

  - ### length

    protected int length

- ## Constructor Details

  - ### PointerDataType

    public PointerDataType()
    Creates a dynamically-sized default pointer data type. A dynamic pointer size of 4-bytes will be in used, but will adapt to a data type manager's data organization when resolved.

  - ### PointerDataType

    public PointerDataType(DataTypeManager dtm)
    Creates a dynamically-sized default pointer data type. The pointer size is established dynamically based upon the data organization associated with the specified dtm but can adapt to another data type manager's data organization when resolved.
    Parameters:
      `dtm` - data-type manager whose data organization should be used

  - ### PointerDataType

    public PointerDataType(DataType referencedDataType)
    Construct a dynamically-sized pointer to a referencedDataType A dynamic pointer size of 4-bytes will be in used, but will adapt to a data type manager's data organization when resolved.
    Parameters:
      `referencedDataType` - data type this pointer points to

  - ### PointerDataType

    public PointerDataType(DataType referencedDataType, int length)
    Construct a pointer of a specified length to a referencedDataType. Note: It is preferred to use default sized pointers when possible (i.e., length=-1, see `PointerDataType(DataType)`) instead of explicitly specifying the pointer length value.
    Parameters:
      `referencedDataType` - data type this pointer points to
      `length` - pointer length (values <= 0 will result in dynamically-sized pointer)

  - ### PointerDataType

    public PointerDataType(DataType referencedDataType, DataTypeManager dtm)
    Construct a dynamically-sized pointer to the given data type. The pointer size is established dynamically based upon the data organization associated with the specified dtm but can adapt to another data type manager's data organization when resolved.
    Parameters:
      `referencedDataType` - data type this pointer points to
      `dtm` - data-type manager whose data organization should be used

  - ### PointerDataType

    public PointerDataType(DataType referencedDataType, int length, DataTypeManager dtm)
    Construct a pointer of a specified length to a referencedDataType. Note: It is preferred to use default sized pointers when possible (i.e., length=-1, see `PointerDataType(DataType, DataTypeManager)`) instead of explicitly specifying the pointer length value.
    Parameters:
      `referencedDataType` - data type this pointer points to
      `length` - pointer length (-1 will result in dynamically-sized pointer)
      `dtm` - associated data type manager whose data organization will be used

- ## Method Details

  - ### clone

    public final Pointer clone(DataTypeManager dtm)
    Description copied from interface: `DataType`
    Returns an instance of this DataType using the specified `DataTypeManager` to allow its use of the corresponding `DataOrganization` while retaining its unique identity (see `DataType.getUniversalID()` and archive association (see `DataType.getSourceArchive()`) if applicable.

    This instance will be returned if this datatype's DataTypeManager matches the specified dtm. The recursion depth of a clone will stop on any datatype whose `DataTypeManager` matches the specified dtm and simply use the existing datatype instance.

    NOTE: In general, this method should not be used to obtain an instance to be modified. In most cases changes may be made directly to this instance if supported or to a `DataType.copy(DataTypeManager)` of this type.

    Specified by:
      `clone` in interface `DataType`
    Parameters:
      `dtm` - the data-type manager instance whose data-organization should apply.
    Returns:
      cloned instance which may be the same as this instance

  - ### getDataType

    public DataType getDataType()
    Description copied from interface: `Pointer`
    Returns the "pointed to" dataType
    Specified by:
      `getDataType` in interface `Pointer`
    Returns:
      referenced datatype (may be null)

  - ### 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.

  - ### getDefaultLabelPrefix

    public String getDefaultLabelPrefix()
    Description copied from interface: `DataType`
    Returns the appropriate string to use as the default label prefix in the absence of any data.
    Specified by:
      `getDefaultLabelPrefix` in interface `DataType`
    Overrides:
      `getDefaultLabelPrefix` in class `AbstractDataType`
    Returns:
      the default label prefix or null if none specified.

  - ### getDefaultLabelPrefix

    public String getDefaultLabelPrefix(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options)
    Description copied from interface: `DataType`
    Returns the appropriate string to use as the default label prefix.
    Specified by:
      `getDefaultLabelPrefix` in interface `DataType`
    Overrides:
      `getDefaultLabelPrefix` in class `AbstractDataType`
    Parameters:
      `buf` - memory buffer containing the bytes.
      `settings` - the Settings object
      `len` - the length of the data.
      `options` - options for how to format the default label prefix.
    Returns:
      the default label prefix or null if none specified.

  - ### getLabelString

    public static String getLabelString(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options)

  - ### getDisplayName

    public String getDisplayName()
    Description copied from interface: `DataType`
    Gets the name for referring to this datatype.
    Specified by:
      `getDisplayName` in interface `DataType`
    Overrides:
      `getDisplayName` in class `AbstractDataType`
    Returns:
      generic name for this Data Type (i.e.: Word)

  - ### getDescription

    public String getDescription()
    Description copied from interface: `DataType`
    Get a String briefly describing this DataType.
    Specified by:
      `getDescription` in interface `DataType`
    Returns:
      a one-liner describing this DataType.

  - ### getMnemonic

    public String getMnemonic(Settings settings)
    Description copied from interface: `DataType`
    Get the mnemonic for this DataType.
    Specified by:
      `getMnemonic` in interface `DataType`
    Overrides:
      `getMnemonic` in class `AbstractDataType`
    Parameters:
      `settings` - settings which may influence the result or null
    Returns:
      the mnemonic for this DataType.

  - ### getValue

    public Object getValue(MemBuffer buf, Settings settings, int len)
    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.
      `len` - 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

  - ### 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.

  - ### getTypeDefSettingsDefinitions

    public TypeDefSettingsDefinition[] getTypeDefSettingsDefinitions()
    Description copied from interface: `DataType`
    Get the list of all settings definitions for this datatype that may be used for an associated `TypeDef`. When used for an associated `TypeDef`, these settings will be considered during a `DataType.isEquivalent(DataType)` check and will be preserved during the resolve process.
    Specified by:
      `getTypeDefSettingsDefinitions` in interface `DataType`
    Overrides:
      `getTypeDefSettingsDefinitions` in class `AbstractDataType`
    Returns:
      a list of the settings definitions for a `TypeDef` associated with this datatype.

  - ### getAddressValue

    public static Address getAddressValue(MemBuffer buf, int size, Settings settings)
    Generate an address value based upon bytes stored at the specified buf location. Interpretation of settings may depend on access to a `Memory` object associated with the specified `MemBuffer` buf.
    The following pointer-typedef settings are supported:
    - `AddressSpaceSettingsDefinition`
    - `OffsetMaskSettingsDefinition`
    - `OffsetShiftSettingsDefinition`
    - `PointerTypeSettingsDefinition`
    Parameters:
      `buf` - memory buffer positioned to stored pointer
      `size` - pointer size in bytes
      `settings` - settings which may influence address generation
    Returns:
      address value or null if unusable buf or data

  - ### getAddressValue

    public static Address getAddressValue(MemBuffer buf, int size, Settings settings, Consumer<String> errorHandler)
    Generate an address value based upon bytes stored at the specified buf location. Interpretation of settings may depend on access to a `Memory` object associated with the specified `MemBuffer` buf.
    The following pointer-typedef settings are supported:
    - `AddressSpaceSettingsDefinition`
    - `OffsetMaskSettingsDefinition`
    - `OffsetShiftSettingsDefinition`
    - `PointerTypeSettingsDefinition`
    Parameters:
      `buf` - memory buffer positioned to stored pointer
      `size` - pointer size in bytes
      `settings` - settings which may influence address generation
      `errorHandler` - if null returned an error may be conveyed to this errorHandler
    Returns:
      address value or null if unusable buf or data

  - ### getAddressValue

    public static Address getAddressValue(MemBuffer buf, int size, AddressSpace targetSpace)
    Generate an address value based upon bytes stored at the specified buf location. The stored bytes will be interpreted as an unsigned byte offset into the specified targetSpace.
    Parameters:
      `buf` - memory buffer and stored pointer location
      `size` - pointer size in bytes
      `targetSpace` - address space for returned address
    Returns:
      address value or null if unusable buf or data

  - ### getRepresentation

    public String getRepresentation(MemBuffer buf, Settings settings, int len)
    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.
      `len` - the number of bytes to represent.
    Returns:
      the representation of the data in this format, never null.

  - ### isEquivalent

    public boolean isEquivalent(DataType dt)
    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:
      `dt` - the datatype being tested for equivalence.
    Returns:
      true if the if the given datatype is equivalent to this datatype.

  - ### dataTypeDeleted

    public void dataTypeDeleted(DataType dt)
    Description copied from interface: `DataType`
    Informs this datatype that the given datatype has been deleted.

    TODO: This method is reserved for internal DB use.

    Specified by:
      `dataTypeDeleted` in interface `DataType`
    Overrides:
      `dataTypeDeleted` in class `AbstractDataType`
    Parameters:
      `dt` - the datatype that has been deleted.

  - ### isDeleted

    public boolean isDeleted()
    Description copied from interface: `DataType`
    Returns true if this datatype has been deleted and is no longer valid
    Specified by:
      `isDeleted` in interface `DataType`
    Overrides:
      `isDeleted` in class `AbstractDataType`
    Returns:
      true if this datatype has been deleted and is no longer valid.

  - ### dataTypeReplaced

    public void dataTypeReplaced(DataType oldDt, DataType newDt)
    Description copied from interface: `DataType`
    Informs this datatype that the given oldDT has been replaced with newDT

    TODO: This method is reserved for internal DB use.

    Specified by:
      `dataTypeReplaced` in interface `DataType`
    Overrides:
      `dataTypeReplaced` in class `AbstractDataType`
    Parameters:
      `oldDt` - old datatype
      `newDt` - new datatype

  - ### dataTypeNameChanged

    public void dataTypeNameChanged(DataType dt, String oldName)
    Description copied from interface: `DataType`
    Informs this datatype that its name has changed from the indicated old name.

    TODO: This method is reserved for internal DB use.

    Specified by:
      `dataTypeNameChanged` in interface `DataType`
    Overrides:
      `dataTypeNameChanged` in class `AbstractDataType`
    Parameters:
      `dt` - the datatype whose name changed
      `oldName` - the datatype's old name

  - ### getCategoryPath

    public CategoryPath getCategoryPath()
    Description copied from interface: `DataType`
    Gets the categoryPath associated with this datatype
    Specified by:
      `getCategoryPath` in interface `DataType`
    Overrides:
      `getCategoryPath` in class `AbstractDataType`
    Returns:
      the datatype's category path

  - ### 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.

  - ### getPointer

    public static Pointer getPointer(DataType dt, DataTypeManager dtm)
    Get a pointer data-type instance with a default size
    Parameters:
      `dt` - data-type referenced by pointer
      `dtm` - program data-type manager (required) a generic data-type will be returned if possible.
    Returns:
      signed integer data type

  - ### getPointer

    public static Pointer getPointer(DataType dt, int pointerSize)
    Get a pointer data-type instance of the requested size. NOTE: The returned data-type will not be associated with any particular data-type-manager and may therefore not utilize dynamically-sized-pointers when a valid pointerSize is specified. If an invalid pointerSize is specified, a dynamically-size pointer will be returned whose length is based upon the default-data-organization.
    Parameters:
      `dt` - data-type referenced by pointer
      `pointerSize` - pointer size
    Returns:
      signed integer data type

  - ### newPointer

    public Pointer newPointer(DataType dt)
    Description copied from interface: `Pointer`
    Creates a pointer to the indicated data type.
    Specified by:
      `newPointer` in interface `Pointer`
    Parameters:
      `dt` - the data type to point to.
    Returns:
      the newly created pointer.

  - ### 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

  - ### toString

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