Class DataTypeImpl

java.lang.Object
ghidra.program.model.data.AbstractDataType
ghidra.program.model.data.DataTypeImpl
All Implemented Interfaces:
DataType
Direct Known Subclasses:
ArrayDataType, BuiltIn, DefaultDataType, GenericDataType, MissingBuiltInDataType

public abstract class DataTypeImpl extends AbstractDataType
Base implementation for dataTypes. NOTE: Settings are immutable when a DataTypeManager has not been specified (i.e., null).
  • Field Details

    • defaultSettings

      protected Settings defaultSettings
  • Constructor Details

  • Method Details

    • 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)).
      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.
    • getDefaultSettings

      public Settings getDefaultSettings()
      Description copied from interface: DataType
      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.
    • getSettingsDefinitions

      public SettingsDefinition[] getSettingsDefinitions()
      Description copied from interface: DataType
      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 DataType.isEquivalent(DataType) checking or during the resolve process.

      Returns:
      list of the settings definitions for this datatype.
    • getPathName

      public String getPathName()
      Description copied from interface: DataType
      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.

      Specified by:
      getPathName in interface DataType
      Overrides:
      getPathName in class AbstractDataType
      Returns:
      the path, or just this type's name
    • 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.

      Returns:
      byte length of binary encoding.
    • getAlignment

      public int getAlignment()
      Description copied from interface: DataType
      Gets the alignment to be used when aligning this datatype within another datatype.
      Returns:
      this datatype's alignment.
    • addParent

      public void addParent(DataType dt)
      Description copied from interface: DataType
      Inform this data type that it has the given parent
      TODO: This method is reserved for internal DB use.
      Specified by:
      addParent in interface DataType
      Overrides:
      addParent in class AbstractDataType
      Parameters:
      dt - parent data type
    • removeParent

      public void removeParent(DataType dt)
      Description copied from interface: DataType
      Remove a parent datatype

      TODO: This method is reserved for internal DB use.

      Specified by:
      removeParent in interface DataType
      Overrides:
      removeParent in class AbstractDataType
      Parameters:
      dt - parent datatype
    • getParents

      public Collection<DataType> getParents()
      Description copied from interface: DataType
      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.
      Specified by:
      getParents in interface DataType
      Overrides:
      getParents in class AbstractDataType
      Returns:
      parents of this datatype
    • notifySizeChanged

      protected void notifySizeChanged()
      Notify all parents that the size of this datatype has changed or other significant change that may affect a parent containing this datatype.
    • notifyAlignmentChanged

      protected void notifyAlignmentChanged()
      Notify all parents that this datatype's alignment has changed
    • notifyNameChanged

      protected void notifyNameChanged(String oldName)
      Notify all parents that this datatype's name has changed
      Parameters:
      oldName -
    • notifyDeleted

      protected void notifyDeleted()
      Notify all parents that this datatype has been deleted
    • notifyReplaced

      protected void notifyReplaced(DataType replacement)
      Notify any parents that I have been replaced.
      Parameters:
      replacement - replacement data type
    • notifyParents

      protected final void notifyParents(Consumer<DataType> consumer)
    • getLastChangeTime

      public long getLastChangeTime()
      Description copied from interface: DataType
      Get the timestamp corresponding to the last time this type was changed within its datatype manager
      Specified by:
      getLastChangeTime in interface DataType
      Overrides:
      getLastChangeTime in class AbstractDataType
      Returns:
      timestamp of last change within datatype manager
    • getLastChangeTimeInSourceArchive

      public long getLastChangeTimeInSourceArchive()
      Description copied from interface: DataType
      Get the timestamp corresponding to the last time this type was sync'd within its source archive
      Specified by:
      getLastChangeTimeInSourceArchive in interface DataType
      Overrides:
      getLastChangeTimeInSourceArchive in class AbstractDataType
      Returns:
      timestamp of last sync with source archive
    • getSourceArchive

      public SourceArchive getSourceArchive()
      Description copied from interface: DataType
      Get the source archive where this type originated
      Specified by:
      getSourceArchive in interface DataType
      Overrides:
      getSourceArchive in class AbstractDataType
      Returns:
      source archive object
    • setSourceArchive

      public void setSourceArchive(SourceArchive archive)
      Description copied from interface: DataType
      Set the source archive where this type originated
      Specified by:
      setSourceArchive in interface DataType
      Overrides:
      setSourceArchive in class AbstractDataType
      Parameters:
      archive - source archive object
    • 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 AbstractDataType
      Returns:
      datatype UniversalID
    • replaceWith

      public void replaceWith(DataType dataType)
      Description copied from interface: 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.

      Specified by:
      replaceWith in interface DataType
      Overrides:
      replaceWith in class AbstractDataType
      Parameters:
      dataType - the datatype that contains the internals to upgrade to.
    • setLastChangeTime

      public void setLastChangeTime(long lastChangeTime)
      Description copied from interface: DataType
      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.

      Specified by:
      setLastChangeTime in interface DataType
      Overrides:
      setLastChangeTime in class AbstractDataType
      Parameters:
      lastChangeTime - the time to use as the lastChangeTime for this datatype
    • setLastChangeTimeInSourceArchive

      public void setLastChangeTimeInSourceArchive(long lastChangeTimeInSourceArchive)
      Description copied from interface: DataType
      Sets the lastChangeTimeInSourceArchive for this datatype.

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

      Specified by:
      setLastChangeTimeInSourceArchive in interface DataType
      Overrides:
      setLastChangeTimeInSourceArchive in class AbstractDataType
      Parameters:
      lastChangeTimeInSourceArchive - the time to use as the lastChangeTimeInSourceArchive for this datatype
    • setDescription

      public void setDescription(String description) throws UnsupportedOperationException
      Sets a String briefly describing this DataType.
      If a data type that extends this class wants to allow the description to be changed, then it must override this method.
      Specified by:
      setDescription in interface DataType
      Overrides:
      setDescription in class AbstractDataType
      Parameters:
      description - a one-liner describing this DataType.
      Throws:
      UnsupportedOperationException - if the description is not allowed to be set for this data type.
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public final boolean equals(Object obj)
      Overrides:
      equals in class Object