Class DataTypeComponentImpl

java.lang.Object
ghidra.program.model.data.DataTypeComponentImpl
All Implemented Interfaces:
DataTypeComponent, InternalDataTypeComponent, Serializable

public class DataTypeComponentImpl extends Object implements InternalDataTypeComponent, Serializable
Basic implementation of a DataTypeComponent
See Also:
  • Constructor Details

    • DataTypeComponentImpl

      public DataTypeComponentImpl(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset, String fieldName, String comment)
      Create a new DataTypeComponent
      Parameters:
      dataType - the dataType for this component
      parent - the dataType that this component belongs to
      length - the length of the dataType in this component.
      ordinal - the index within its parent.
      offset - the byte offset within the parent
      fieldName - the name associated with this component
      comment - the comment associated with this component
    • DataTypeComponentImpl

      public DataTypeComponentImpl(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset)
      Create a new DataTypeComponent
      Parameters:
      dataType - the dataType for this component
      parent - the dataType that this component belongs to
      length - the length of the dataType in this component.
      ordinal - the index of this component within its parent.
      offset - the byte offset within the parent
  • Method Details

    • isBitFieldComponent

      public boolean isBitFieldComponent()
      Description copied from interface: DataTypeComponent
      Determine if the specified component corresponds to a bit-field.
      Specified by:
      isBitFieldComponent in interface DataTypeComponent
      Returns:
      true if bit-field else false
    • isZeroBitFieldComponent

      public boolean isZeroBitFieldComponent()
      Description copied from interface: DataTypeComponent
      Determine if the specified component corresponds to a zero-length bit-field.
      Specified by:
      isZeroBitFieldComponent in interface DataTypeComponent
      Returns:
      true if zero-length bit-field else false
    • getOffset

      public int getOffset()
      Description copied from interface: DataTypeComponent
      Get the byte offset of where this component begins relative to the start of the parent data type.
      Specified by:
      getOffset in interface DataTypeComponent
      Returns:
      offset of start of component relative to the start of the parent data type.
    • getEndOffset

      public int getEndOffset()
      Description copied from interface: DataTypeComponent
      Get the byte offset of where this component ends relative to the start of the parent data type.
      Specified by:
      getEndOffset in interface DataTypeComponent
      Returns:
      offset of end of component relative to the start of the parent data type.
    • getComment

      public String getComment()
      Description copied from interface: DataTypeComponent
      Get the comment for this dataTypeComponent.
      Specified by:
      getComment in interface DataTypeComponent
      Returns:
      component comment string or null if one has not been set
    • setComment

      public void setComment(String comment)
      Description copied from interface: DataTypeComponent
      Sets the comment for the component.
      Specified by:
      setComment in interface DataTypeComponent
      Parameters:
      comment - this components comment or null to clear comment.
    • getFieldName

      public String getFieldName()
      Description copied from interface: DataTypeComponent
      Get this component's field name within its parent. If this method returns null DataTypeComponent.getDefaultFieldName() can be used to obtain a default generated field name.
      Specified by:
      getFieldName in interface DataTypeComponent
      Returns:
      this component's field name within its parent or null if one has not been set.
    • setFieldName

      public void setFieldName(String name) throws DuplicateNameException
      Description copied from interface: DataTypeComponent
      Sets the field name. If the field name is empty it will be set to null, which is the default field name. An exception is thrown if one of the parent's other components already has the specified field name.
      Specified by:
      setFieldName in interface DataTypeComponent
      Parameters:
      name - the new field name for this component.
      Throws:
      DuplicateNameException - if another component of the parent has the specified field name.
    • checkDefaultFieldName

      public static void checkDefaultFieldName(String fieldName) throws DuplicateNameException
      Throws:
      DuplicateNameException
    • getDataType

      public DataType getDataType()
      Description copied from interface: DataTypeComponent
      Returns the dataType in this component.
      Specified by:
      getDataType in interface DataTypeComponent
      Returns:
      the dataType in this component
    • getParent

      public DataType getParent()
      Description copied from interface: DataTypeComponent
      returns the dataType that contains this component.
      Specified by:
      getParent in interface DataTypeComponent
      Returns:
      the dataType that contains this component.
    • update

      public void update(int ordinal, int offset, int length)
      Description copied from interface: InternalDataTypeComponent
      Update component ordinal, offset and length during alignment
      Specified by:
      update in interface InternalDataTypeComponent
      Parameters:
      ordinal - updated ordinal
      offset - updated offset
      length - updated byte length
    • getLength

      public int getLength()
      Description copied from interface: DataTypeComponent
      Get the length of this component in 8-bit bytes. Zero-length components will report a length of 0 and may overlap other components at the same offset. Similarly, multiple adjacent bit-field components may appear to overlap at the byte-level.
      Specified by:
      getLength in interface DataTypeComponent
      Returns:
      the length of this component in 8-bit bytes
    • getOrdinal

      public int getOrdinal()
      Description copied from interface: DataTypeComponent
      Get the ordinal position within the parent dataType.
      Specified by:
      getOrdinal in interface DataTypeComponent
      Returns:
      ordinal of this component within the parent data type.
    • getDefaultSettings

      public Settings getDefaultSettings()
      Description copied from interface: DataTypeComponent
      Gets the default settings for this data type component.
      Specified by:
      getDefaultSettings in interface DataTypeComponent
      Returns:
      a Settings object that is the set of default values for this dataType component
    • hashCode

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

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • isEquivalent

      public boolean isEquivalent(DataTypeComponent dtc)
      Description copied from interface: DataTypeComponent
      Returns true if the given dataTypeComponent is equivalent to this dataTypeComponent. A dataTypeComponent is "equivalent" if the other component has a data type that is equivalent to this component's data type. The dataTypeComponents must also have the same offset, field name, and comment. The length is only checked for components which are dynamic and whose size must be specified when creating a component.
      Specified by:
      isEquivalent in interface DataTypeComponent
      Parameters:
      dtc - the dataTypeComponent being tested for equivalence.
      Returns:
      true if the given dataTypeComponent is equivalent to this dataTypeComponent.
    • setDataType

      public void setDataType(DataType dt)
      Description copied from interface: InternalDataTypeComponent
      Sets the DataType for this component. Must be used carefully since the component will not be resized.
      Specified by:
      setDataType in interface InternalDataTypeComponent
      Parameters:
      dt - the new DataType for this component
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getPreferredComponentLength

      public static int getPreferredComponentLength(DataType dataType, int length)
      Get the preferred length for a new component. The length returned will be no larger than the specified length.
      Parameters:
      dataType - new component datatype
      length - constrained length or -1 to force use of dataType size. Dynamic types such as string must have a positive length specified.
      Returns:
      preferred component length
      Throws:
      IllegalArgumentException - if length not specified for a Dynamic dataType.