Package ghidra.program.model.data

# Interface DataType

All Known Subinterfaces:
  `Array`, `ArrayStringable`, `BuiltInDataType`, `Composite`, `CompositeInternal`, `DataTypeWithCharset`, `Dynamic`, `Enum`, `FactoryDataType`, `FunctionDefinition`, `Pointer`, `Structure`, `StructureInternal`, `TypeDef`, `Union`, `UnionInternal`

All Known Implementing Classes:
  `AbstractColorDataType`, `AbstractComplexDataType`, `AbstractDataType`, `AbstractFloatDataType`, `AbstractIntegerDataType`, `AbstractLeb128DataType`, `AbstractPointerTypedefBuiltIn`, `AbstractSignedIntegerDataType`, `AbstractStringDataType`, `AbstractUnsignedIntegerDataType`, `AIFFDataType`, `AlignmentDataType`, `AndroidElfRelocationTableDataType`, `ArrayDataType`, `AUDataType`, `BadDataType`, `BitFieldDataType`, `BitmapResourceDataType`, `BooleanDataType`, `BuiltIn`, `ByteDataType`, `CharDataType`, `CliAbstractSig.CliTypeCodeDataType`, `CliBlobMarshalSpec.CliNativeTypeDataType`, `CliBlobMarshalSpec.CliSafeArrayElemTypeDataType`, `CliFlags.CliEnumAssemblyFlags`, `CliFlags.CliEnumAssemblyHashAlgorithm`, `CliFlags.CliEnumEventAttributes`, `CliFlags.CliEnumFieldAttributes`, `CliFlags.CliEnumFileAttributes`, `CliFlags.CliEnumGenericParamAttributes`, `CliFlags.CliEnumManifestResourceAttributes`, `CliFlags.CliEnumMethodAttributes`, `CliFlags.CliEnumMethodImplAttributes`, `CliFlags.CliEnumMethodSemanticsAttributes`, `CliFlags.CliEnumParamAttributes`, `CliFlags.CliEnumPInvokeAttributes`, `CliFlags.CliEnumPropertyAttributes`, `CliFlags.CliEnumTypeAttributes`, `Complex16DataType`, `Complex32DataType`, `Complex8DataType`, `CompositeDataTypeImpl`, `CountedDynamicDataType`, `DataTypeImpl`, `DefaultDataType`, `DialogResourceDataType`, `DoubleComplexDataType`, `DoubleDataType`, `DwarfEncodingModeDataType`, `DWordDataType`, `DynamicDataType`, `ElfDataType`, `EnumDataType`, `FactoryStructureDataType`, `FileTimeDataType`, `Float10DataType`, `Float16DataType`, `Float2DataType`, `Float4DataType`, `Float8DataType`, `FloatComplexDataType`, `FloatDataType`, `FunctionDefinitionDataType`, `FunctionSignatureImpl`, `GenericDataType`, `GifDataType`, `GroupIconResourceDataType`, `GuidDataType`, `HTMLResourceDataType`, `IBO32DataType`, `IBO64DataType`, `IconMaskResourceDataType`, `IconResourceDataType`, `ImageCor20Header.ImageCor20Flags`, `IndexedDynamicDataType`, `Integer16DataType`, `Integer3DataType`, `Integer5DataType`, `Integer6DataType`, `Integer7DataType`, `IntegerDataType`, `JPEGDataType`, `LongDataType`, `LongDoubleComplexDataType`, `LongDoubleDataType`, `LongLongDataType`, `MacintoshTimeStampDataType`, `MenuResourceDataType`, `MIDIDataType`, `MissingBuiltInDataType`, `MUIResourceDataType`, `PartialUnion`, `PascalString255DataType`, `PascalStringDataType`, `PascalUnicodeDataType`, `PcRelative31AddressDataType`, `PeDataType`, `PERichTableDataType`, `PEx64UnwindInfoDataType`, `PngDataType`, `Pointer16DataType`, `Pointer24DataType`, `Pointer32DataType`, `Pointer40DataType`, `Pointer48DataType`, `Pointer56DataType`, `Pointer64DataType`, `Pointer8DataType`, `PointerDataType`, `PointerTypedef`, `QWordDataType`, `RepeatCountDataType`, `RepeatedDynamicDataType`, `RepeatedStringDataType`, `RGB16ColorDataType`, `RGB32ColorDataType`, `RTTI0DataType`, `RTTI1DataType`, `RTTI2DataType`, `RTTI3DataType`, `RTTI4DataType`, `RTTIDataType`, `SegmentedCodePointerDataType`, `ShiftedAddressDataType`, `ShortDataType`, `SignedByteDataType`, `SignedCharDataType`, `SignedDWordDataType`, `SignedLeb128DataType`, `SignedQWordDataType`, `SignedWordDataType`, `StringDataType`, `StringUTF8DataType`, `StructureDataType`, `StructuredDynamicDataType`, `TerminatedStringDataType`, `TerminatedUnicode32DataType`, `TerminatedUnicodeDataType`, `TypedefDataType`, `Undefined`, `Undefined1DataType`, `Undefined2DataType`, `Undefined3DataType`, `Undefined4DataType`, `Undefined5DataType`, `Undefined6DataType`, `Undefined7DataType`, `Undefined8DataType`, `Unicode32DataType`, `UnicodeDataType`, `UnionDataType`, `UnsignedCharDataType`, `UnsignedInteger16DataType`, `UnsignedInteger3DataType`, `UnsignedInteger5DataType`, `UnsignedInteger6DataType`, `UnsignedInteger7DataType`, `UnsignedIntegerDataType`, `UnsignedLeb128DataType`, `UnsignedLongDataType`, `UnsignedLongLongDataType`, `UnsignedShortDataType`, `VoidDataType`, `WAVEDataType`, `WEVTResourceDataType`, `WideChar16DataType`, `WideChar32DataType`, `WideCharDataType`, `WordDataType`

public interface DataType
The interface that all datatypes must implement.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `CONFLICT_SUFFIX`
  Datatype name conflict suffix.
  `static final DataType`
  `DEFAULT`
  Singleton instance of default datatype.
  `static final long`
  `NO_LAST_CHANGE_TIME`
  `static final long`
  `NO_SOURCE_SYNC_TIME`
  `static final String`
  `TYPEDEF_ATTRIBUTE_PREFIX`
  `static final String`
  `TYPEDEF_ATTRIBUTE_SUFFIX`
  `static final DataType`
  `VOID`
  Deprecated.
  should use `VoidDataType.dataType` instead

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addParent(DataType dt)`
  Inform this data type that it has the given parent
  TODO: This method is reserved for internal DB use.
  `DataType`
  `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 `getUniversalID()` and archive association (see `getSourceArchive()`) if applicable.
  `DataType`
  `copy(DataTypeManager dtm)`
  Returns a new instance (shallow copy) of this DataType with a new identity and no source archive association.
  `void`
  `dataTypeAlignmentChanged(DataType dt)`
  Notification that the given datatype's alignment has changed.
  `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
  `void`
  `dataTypeSizeChanged(DataType dt)`
  Notification that the given datatype's size has changed.
  `boolean`
  `dependsOn(DataType dt)`
  Check if this datatype depends on the existence of the given datatype.
  `byte[]`
  `encodeRepresentation(String repr, MemBuffer buf, Settings settings, int length)`
  Encode bytes according to the display format for this type.
  `byte[]`
  `encodeValue(Object value, MemBuffer buf, Settings settings, int length)`
  Encode bytes from an Object appropriate for this DataType.
  `int`
  `getAlignedLength()`
  Get the aligned-length of this datatype as a number of 8-bit bytes.
  `int`
  `getAlignment()`
  Gets the alignment to be used when aligning this datatype within another datatype.
  `CategoryPath`
  `getCategoryPath()`
  Gets the categoryPath associated with this datatype
  `DataOrganization`
  `getDataOrganization()`
  Returns the DataOrganization associated with this data-type
  `DataTypeManager`
  `getDataTypeManager()`
  Get the DataTypeManager containing this datatype.
  `DataTypePath`
  `getDataTypePath()`
  Returns the dataTypePath for this datatype;
  `String`
  `getDefaultAbbreviatedLabelPrefix()`
  Returns the prefix to use for this datatype when an abbreviated prefix is desired.
  `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`
  `getDefaultOffcutLabelPrefix(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options, int offcutOffset)`
  Returns the appropriate string to use as the default label prefix.
  `Settings`
  `getDefaultSettings()`
  Gets the settings for this data type.
  `String`
  `getDescription()`
  Get a String briefly describing this DataType.
  `String`
  `getDisplayName()`
  Gets the name for referring to this datatype.
  `long`
  `getLastChangeTime()`
  Get the timestamp corresponding to the last time this type was changed within its datatype manager
  `long`
  `getLastChangeTimeInSourceArchive()`
  Get the timestamp corresponding to the last time this type was sync'd within its source archive
  `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.
  `Collection<DataType>`
  `getParents()`
  Get the parents of this datatype.
  `String`
  `getPathName()`
  Get the full category path name that includes this datatype's name.
  `String`
  `getRepresentation(MemBuffer buf, Settings settings, int length)`
  Get bytes from memory in a printable format for this type.
  `SettingsDefinition[]`
  `getSettingsDefinitions()`
  Get the list of settings definitions available for use with this datatype.
  `SourceArchive`
  `getSourceArchive()`
  Get the source archive where this type originated
  `TypeDefSettingsDefinition[]`
  `getTypeDefSettingsDefinitions()`
  Get the list of all settings definitions for this datatype that may be used for an associated `TypeDef`.
  `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 `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`
  `isEncodable()`
  Check if this type supports encoding (patching)
  `boolean`
  `isEquivalent(DataType dt)`
  Check if the given datatype is equivalent to this datatype.
  `boolean`
  `isNotYetDefined()`
  Indicates if this datatype has not yet been fully defined.
  `boolean`
  `isZeroLength()`
  Indicates this datatype is defined with a zero length.
  `void`
  `removeParent(DataType dt)`
  Remove a parent datatype
  `void`
  `replaceWith(DataType dataType)`
  For datatypes that support change, this method replaces the internals of this datatype with the internals of the given datatype.
  `void`
  `setCategoryPath(CategoryPath path)`
  Set the categoryPath associated with this datatype
  `void`
  `setDescription(String description)`
  Sets a String briefly describing this DataType.
  `void`
  `setLastChangeTime(long lastChangeTime)`
  Sets the lastChangeTime for this datatype.
  `void`
  `setLastChangeTimeInSourceArchive(long lastChangeTimeInSourceArchive)`
  Sets the lastChangeTimeInSourceArchive for this datatype.
  `void`
  `setName(String name)`
  Sets the name of the datatype
  `void`
  `setNameAndCategory(CategoryPath path, String name)`
  Sets the name and category of a datatype at the same time.
  `void`
  `setSourceArchive(SourceArchive archive)`
  Set the source archive where this type originated

- ## Field Details

  - ### DEFAULT

    static final DataType DEFAULT
    Singleton instance of default datatype.

  - ### VOID

    @Deprecated static final DataType VOID
    Deprecated.
    should use `VoidDataType.dataType` instead
    Instance of void datatype (never use `==`)

  - ### CONFLICT_SUFFIX

    static final String CONFLICT_SUFFIX
    Datatype name conflict suffix. See `DataTypeUtilities` for various methods related to conflict name handling. Direct use of this string in application/user-level code is discouraged.
    See Also:
      - Constant Field Values

  - ### TYPEDEF_ATTRIBUTE_PREFIX

    static final String TYPEDEF_ATTRIBUTE_PREFIX
    See Also:
      - Constant Field Values

  - ### TYPEDEF_ATTRIBUTE_SUFFIX

    static final String TYPEDEF_ATTRIBUTE_SUFFIX
    See Also:
      - Constant Field Values

  - ### NO_SOURCE_SYNC_TIME

    static final long NO_SOURCE_SYNC_TIME
    See Also:
      - Constant Field Values

  - ### NO_LAST_CHANGE_TIME

    static final long NO_LAST_CHANGE_TIME
    See Also:
      - Constant Field Values

- ## Method Details

  - ### hasLanguageDependantLength

    boolean hasLanguageDependantLength()
    Indicates if the length of this data-type is determined based upon the `DataOrganization` obtained from the associated `DataTypeManager`.
    Returns:
      true length is language/compiler-specification dependent, else false

  - ### getSettingsDefinitions

    SettingsDefinition[] getSettingsDefinitions()
    Get the list of settings definitions available for use with this datatype.

    In the case of a `TypeDef`, the return list will include the `TypeDefSettingsDefinition` list from the associated base data type.

    Unlike `TypeDefSettingsDefinition` standard settings definitions generally support default, component-default and data-instance use. In addition, standard settings definitions are never considered during `isEquivalent(DataType)` checking or during the resolve process.

    Returns:
      list of the settings definitions for this datatype.

  - ### getTypeDefSettingsDefinitions

    TypeDefSettingsDefinition[] getTypeDefSettingsDefinitions()
    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 `isEquivalent(DataType)` check and will be preserved during the resolve process.
    Returns:
      a list of the settings definitions for a `TypeDef` associated with this datatype.

  - ### getDefaultSettings

    Settings getDefaultSettings()
    Gets the settings for this data type. The settings may have underlying default settings and may in turn become defaults for instance-specific settings (e.g., Data or DataTypeComponent). It is important to note that these settings are tied to a specific DataType instantiation so it is important to understand the scope of its use. Example: The `BuiltInDataTypeManager` has its own set of DataType instances which are separate from those which have been instantiated or resolved to a specific Program/Archive `DataTypeManager`. Settings manipulation may be disabled by default in some instances.
    Returns:
      the settings for this dataType.

  - ### clone

    DataType 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 `getUniversalID()` and archive association (see `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 `copy(DataTypeManager)` of this type.

    Parameters:
      `dtm` - the data-type manager instance whose data-organization should apply.
    Returns:
      cloned instance which may be the same as this instance

  - ### copy

    DataType copy(DataTypeManager dtm)
    Returns a new instance (shallow copy) of this DataType with a new identity and no source archive association.

    Any reference to other datatypes will use `clone(DataTypeManager)`.

    Parameters:
      `dtm` - the data-type manager instance whose data-organization should apply.
    Returns:
      new instanceof of this datatype

  - ### getCategoryPath

    CategoryPath getCategoryPath()
    Gets the categoryPath associated with this datatype
    Returns:
      the datatype's category path

  - ### getDataTypePath

    DataTypePath getDataTypePath()
    Returns the dataTypePath for this datatype;
    Returns:
      the dataTypePath for this datatype;

  - ### setCategoryPath

    void setCategoryPath(CategoryPath path) throws DuplicateNameException
    Set the categoryPath associated with this datatype
    Parameters:
      `path` - the new path
    Throws:
      `DuplicateNameException` - if an attempt to place this datatype into the specified category resulted in a name collision. This should not occur for non-DB DataType instances.

  - ### getDataTypeManager

    DataTypeManager getDataTypeManager()
    Get the DataTypeManager containing this datatype.

    This association should not be used to indicate whether this DataType has been resolved, but is intended to indicate whether the appropriate DataOrganization is being used.

    Returns:
      the DataTypeManager that is associated with this datatype.

  - ### getDisplayName

    String getDisplayName()
    Gets the name for referring to this datatype.
    Returns:
      generic name for this Data Type (i.e.: Word)

  - ### getName

    String getName()
    Get the name of this datatype.
    Returns:
      the name

  - ### getPathName

    String getPathName()
    Get the full category path name that includes this datatype's name.

    If the category is null, then this just the datatype's name is returned.

    Returns:
      the path, or just this type's name

  - ### setName

    void setName(String name) throws InvalidNameException, DuplicateNameException
    Sets the name of the datatype
    Parameters:
      `name` - the new name for this datatype.
    Throws:
      `InvalidNameException` - if the given name does not form a valid name.
      `DuplicateNameException` - if name change on stored `DataType` is a duplicate of another datatype within the same category (only applies to DB stored `DataType`).

  - ### setNameAndCategory

    void setNameAndCategory(CategoryPath path, String name) throws InvalidNameException, DuplicateNameException
    Sets the name and category of a datatype at the same time.
    Parameters:
      `path` - the new category path.
      `name` - the new name
    Throws:
      `InvalidNameException` - if the name is invalid
      `DuplicateNameException` - if name change on stored `DataType` is a duplicate of another datatype within the same category (only applies to DB stored `DataType`).

  - ### getMnemonic

    String getMnemonic(Settings settings)
    Get the mnemonic for this DataType.
    Parameters:
      `settings` - settings which may influence the result or null
    Returns:
      the mnemonic for this DataType.

  - ### getLength

    int getLength()
    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 `isZeroLength()`, and only `Dynamic`/`FactoryDataType` datatypes should return -1. If `isZeroLength()` is true a length of 1 should be returned. Where a zero-length datatype can be handled (e.g., `Composite`) the `isZeroLength()` method should be used.

    Returns:
      the length of this DataType

  - ### getAlignedLength

    int getAlignedLength()
    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 `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 `isZeroLength()`, and only `Dynamic` / `FactoryDataType` / `FunctionDefinition` datatypes should return -1. If `isZeroLength()` is true a length of 1 should be returned.

    Returns:
      byte length of binary encoding.

  - ### isZeroLength

    boolean isZeroLength()
    Indicates this datatype is defined with a zero length.

    This method should not be confused with `isNotYetDefined()` which indicates that nothing but the name and basic type is known.

    NOTE: a zero-length datatype must return a length of 1 via `getLength()`. Zero-length datatypes used as a component within a `Composite` may, or may not, be assigned a component length of 0. The method `DataTypeComponent.usesZeroLengthComponent(DataType)` is used to make this determination.

    Returns:
      true if type definition has a length of 0, else false

  - ### isNotYetDefined

    boolean isNotYetDefined()
    Indicates if this datatype has not yet been fully defined.

    Such datatypes should always return a `getLength()` of 1 and true for `isZeroLength()`. (example: empty structure)

    Returns:
      true if this type is not yet defined.

  - ### getDescription

    String getDescription()
    Get a String briefly describing this DataType.
    Returns:
      a one-liner describing this DataType.

  - ### setDescription

    void setDescription(String description) throws UnsupportedOperationException
    Sets a String briefly describing this DataType.
    Parameters:
      `description` - a one-liner describing this DataType.
    Throws:
      `UnsupportedOperationException` - if the description is not allowed to be set for this datatype.

  - ### getValue

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

    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

  - ### isEncodable

    boolean isEncodable()
    Check if this type supports encoding (patching)

    If unsupported, `encodeValue(Object, MemBuffer, Settings, int)` and `encodeRepresentation(String, MemBuffer, Settings, int)` will always throw an exception. Actions which rely on either `encode` method should not be displayed if the applicable datatype is not encodable.

    Returns:
      true if encoding is supported

  - ### encodeValue

    byte[] encodeValue(Object value, MemBuffer buf, Settings settings, int length) throws DataTypeEncodeException
    Encode bytes from an Object appropriate for this DataType.

    Converts the given object to the byte encoding and returns it. When appropriate, this should seek the nearest encoding to the specified value, since the object may come from a user script. For example, a floating-point value may be rounded. Invalid values should be rejected with a `DataTypeEncodeException`.

    Parameters:
      `value` - the desired value.
      `buf` - a buffer representing the eventual destination of the bytes.
      `settings` - the settings to use.
      `length` - the expected length of the result, usually the length of the data unit, or -1 to let the type choose the length. It may be ignored, e.g., for fixed-length types.
    Returns:
      the encoded value.
    Throws:
      `DataTypeEncodeException` - if the value cannot be encoded for any reason, e.g., incorrect type, not enough space, buffer overflow, unsupported (see `isEncodable()`).

  - ### getValueClass

    Class<?> getValueClass(Settings settings)
    Get the Class of the value Object to be returned by this datatype (see `getValue(MemBuffer, Settings, int)`).
    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.

  - ### getDefaultLabelPrefix

    String getDefaultLabelPrefix()
    Returns the appropriate string to use as the default label prefix in the absence of any data.
    Returns:
      the default label prefix or null if none specified.

  - ### getDefaultAbbreviatedLabelPrefix

    String getDefaultAbbreviatedLabelPrefix()
    Returns the prefix to use for this datatype when an abbreviated prefix is desired.

    For example, some datatypes will build a large default label, at which it is more desirable to have a shortened prefix.

    Returns:
      the prefix to use for this datatype when an abbreviated prefix is desired. May return null.

  - ### getDefaultLabelPrefix

    String getDefaultLabelPrefix(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options)
    Returns the appropriate string to use as the default label prefix.
    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.

  - ### getDefaultOffcutLabelPrefix

    String getDefaultOffcutLabelPrefix(MemBuffer buf, Settings settings, int len, DataTypeDisplayOptions options, int offcutOffset)
    Returns the appropriate string to use as the default label prefix.

    This takes into account the fact that there exists a reference to the data that references `offcutLength` bytes into this type

    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.
      `offcutOffset` - offset into datatype
    Returns:
      the default label prefix.

  - ### getRepresentation

    String getRepresentation(MemBuffer buf, Settings settings, int length)
    Get bytes from memory in a printable format for this type.
    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.

  - ### encodeRepresentation

    byte[] encodeRepresentation(String repr, MemBuffer buf, Settings settings, int length) throws DataTypeEncodeException
    Encode bytes according to the display format for this type.

    Converts the given representation to the byte encoding and returns it. When appropriate, this should seek the nearest encoding to the specified value, since the representation is likely coming from user input. For example, a floating-point value may be rounded. Invalid representations should be rejected with a `DataTypeEncodeException`.

    Parameters:
      `repr` - the representation of the desired value, as in `getRepresentation(MemBuffer, Settings, int)`. The supported formats depend on the specific datatype and its settings.
      `buf` - a buffer representing the eventual destination of the bytes.
      `settings` - the settings to use for the representation.
      `length` - the expected length of the result, usually the length of the data unit, or -1 to let the type choose the length. It may be ignored, e.g., for fixed-length types.
    Returns:
      the encoded value.
    Throws:
      `DataTypeEncodeException` - if the value cannot be encoded for any reason, e.g., incorrect format, not enough space, buffer overflow, unsupported (see `isEncodable()`).

  - ### isDeleted

    boolean isDeleted()
    Returns true if this datatype has been deleted and is no longer valid
    Returns:
      true if this datatype has been deleted and is no longer valid.

  - ### isEquivalent

    boolean isEquivalent(DataType dt)
    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.

    Parameters:
      `dt` - the datatype being tested for equivalence.
    Returns:
      true if the if the given datatype is equivalent to this datatype.

  - ### dataTypeSizeChanged

    void dataTypeSizeChanged(DataType dt)
    Notification that the given datatype's size has changed.

    DataTypes may need to make internal changes in response.
    TODO: This method is reserved for internal DB use.

    Parameters:
      `dt` - the datatype that has changed.

  - ### dataTypeAlignmentChanged

    void dataTypeAlignmentChanged(DataType dt)
    Notification that the given datatype's alignment has changed.

    DataTypes may need to make internal changes in response.
    TODO: This method is reserved for internal DB use.

    Parameters:
      `dt` - the datatype that has changed.

  - ### dataTypeDeleted

    void dataTypeDeleted(DataType dt)
    Informs this datatype that the given datatype has been deleted.

    TODO: This method is reserved for internal DB use.

    Parameters:
      `dt` - the datatype that has been deleted.

  - ### dataTypeReplaced

    void dataTypeReplaced(DataType oldDt, DataType newDt)
    Informs this datatype that the given oldDT has been replaced with newDT

    TODO: This method is reserved for internal DB use.

    Parameters:
      `oldDt` - old datatype
      `newDt` - new datatype

  - ### addParent

    void addParent(DataType dt)
    Inform this data type that it has the given parent
    TODO: This method is reserved for internal DB use.
    Parameters:
      `dt` - parent data type

  - ### removeParent

    void removeParent(DataType dt)
    Remove a parent datatype

    TODO: This method is reserved for internal DB use.

    Parameters:
      `dt` - parent datatype

  - ### dataTypeNameChanged

    void dataTypeNameChanged(DataType dt, String oldName)
    Informs this datatype that its name has changed from the indicated old name.

    TODO: This method is reserved for internal DB use.

    Parameters:
      `dt` - the datatype whose name changed
      `oldName` - the datatype's old name

  - ### getParents

    Collection<DataType> getParents()
    Get the parents of this datatype. NOTE: This method is intended to be used on a DB-managed datatype only and is not fully supported for use with non-DB datatype instances.
    Returns:
      parents of this datatype

  - ### getAlignment

    int getAlignment()
    Gets the alignment to be used when aligning this datatype within another datatype.
    Returns:
      this datatype's alignment.

  - ### dependsOn

    boolean dependsOn(DataType dt)
    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.

    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.

  - ### getSourceArchive

    SourceArchive getSourceArchive()
    Get the source archive where this type originated
    Returns:
      source archive object

  - ### setSourceArchive

    void setSourceArchive(SourceArchive archive)
    Set the source archive where this type originated
    Parameters:
      `archive` - source archive object

  - ### getLastChangeTime

    long getLastChangeTime()
    Get the timestamp corresponding to the last time this type was changed within its datatype manager
    Returns:
      timestamp of last change within datatype manager

  - ### getLastChangeTimeInSourceArchive

    long getLastChangeTimeInSourceArchive()
    Get the timestamp corresponding to the last time this type was sync'd within its source archive
    Returns:
      timestamp of last sync with source archive

  - ### getUniversalID

    UniversalID getUniversalID()
    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.

    Returns:
      datatype UniversalID

  - ### replaceWith

    void replaceWith(DataType dataType)
    For datatypes that support change, this method replaces the internals of this datatype with the internals of the given datatype.

    The datatypes must be of the same "type" (i.e. structure can only be replacedWith another structure.

    Parameters:
      `dataType` - the datatype that contains the internals to upgrade to.
    Throws:
      `UnsupportedOperationException` - if the datatype does not support change.
      `IllegalArgumentException` - if the given datatype is not the same type as this datatype.

  - ### setLastChangeTime

    void setLastChangeTime(long lastChangeTime)
    Sets the lastChangeTime for this datatype.

    Normally, this is updated automatically when a datatype is changed, but when committing or updating while synchronizing an archive, the lastChangeTime may need to be updated externally.

    Parameters:
      `lastChangeTime` - the time to use as the lastChangeTime for this datatype

  - ### setLastChangeTimeInSourceArchive

    void setLastChangeTimeInSourceArchive(long lastChangeTimeInSourceArchive)
    Sets the lastChangeTimeInSourceArchive for this datatype.

    This is used by when a datatype change is committed back to its source archive.

    Parameters:
      `lastChangeTimeInSourceArchive` - the time to use as the lastChangeTimeInSourceArchive for this datatype

  - ### getDataOrganization

    DataOrganization getDataOrganization()
    Returns the DataOrganization associated with this data-type
    Returns:
      associated data organization