Class DataTypeComponentImpl
- java.lang.Object
-
- ghidra.program.model.data.DataTypeComponentImpl
-
- All Implemented Interfaces:
DataTypeComponent
,InternalDataTypeComponent
,java.io.Serializable
public class DataTypeComponentImpl extends java.lang.Object implements InternalDataTypeComponent, java.io.Serializable
Basic implementation of a DataTypeComponent- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from interface ghidra.program.model.data.DataTypeComponent
DEFAULT_FIELD_NAME_PREFIX
-
-
Constructor Summary
Constructors Constructor Description DataTypeComponentImpl(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset)
Create a new DataTypeComponentDataTypeComponentImpl(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset, java.lang.String fieldName, java.lang.String comment)
Create a new DataTypeComponent
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static void
checkDefaultFieldName(java.lang.String fieldName)
boolean
equals(java.lang.Object obj)
java.lang.String
getComment()
Get the comment for this dataTypeComponent.DataType
getDataType()
Returns the dataType in this component.java.lang.String
getDefaultFieldName()
Returns a default Field name.Settings
getDefaultSettings()
Gets the default settings for this data type component.int
getEndOffset()
Get the byte offset of where this component ends relative to the start of the parent data type.java.lang.String
getFieldName()
Get the name of the field name as a component of a Data Type.int
getLength()
Get the length of this component.int
getOffset()
Get the byte offset of where this component begins relative to the start of the parent data type.int
getOrdinal()
Get the ordinal position within the parent dataType.DataType
getParent()
returns the dataType that contains this component.int
hashCode()
boolean
isBitFieldComponent()
Determine if the specified component corresponds to a bit-field.boolean
isEquivalent(DataTypeComponent dtc)
Returns true if the given dataTypeComponent is equivalent to this dataTypeComponent.boolean
isFlexibleArrayComponent()
Determine if this component corresponds to a unsized flexible array which is permitted as the trailing component within a structure.boolean
isZeroBitFieldComponent()
Determine if the specified component corresponds to a zero-length bit-field.void
setComment(java.lang.String comment)
Sets the comment for the component.void
setDataType(DataType dt)
Sets the DataType for this componentvoid
setDefaultSettings(Settings settings)
Set default settings for this dataType.void
setFieldName(java.lang.String name)
Sets the field name.java.lang.String
toString()
void
update(int ordinal, int offset, int length)
Update component ordinal, offset and length during alignment
-
-
-
Constructor Detail
-
DataTypeComponentImpl
public DataTypeComponentImpl(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset, java.lang.String fieldName, java.lang.String comment)
Create a new DataTypeComponent- Parameters:
dataType
- the dataType for this componentparent
- the dataType that this component belongs tolength
- the length of the dataType in this component.ordinal
- the index within its parent.offset
- the byte offset within the parentfieldName
- the name associated with this componentcomment
- 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 componentparent
- the dataType that this component belongs tolength
- 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 Detail
-
isFlexibleArrayComponent
public boolean isFlexibleArrayComponent()
Description copied from interface:DataTypeComponent
Determine if this component corresponds to a unsized flexible array which is permitted as the trailing component within a structure.- Specified by:
isFlexibleArrayComponent
in interfaceDataTypeComponent
- Returns:
- true if component is a trailing flexible array component.
-
isBitFieldComponent
public boolean isBitFieldComponent()
Description copied from interface:DataTypeComponent
Determine if the specified component corresponds to a bit-field.- Specified by:
isBitFieldComponent
in interfaceDataTypeComponent
- 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 interfaceDataTypeComponent
- Returns:
- true if zer-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.NOTE: The special case of a structure flexible array component returns an offset equal to the length of the parent structure since the flexible array component is not included in a structure's length.
- Specified by:
getOffset
in interfaceDataTypeComponent
- 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.NOTE: The special case of a structure flexible array component returns -1 since its length is undefined.
- Specified by:
getEndOffset
in interfaceDataTypeComponent
- Returns:
- offset of end of component relative to the start of the parent data type.
-
getComment
public java.lang.String getComment()
Description copied from interface:DataTypeComponent
Get the comment for this dataTypeComponent.- Specified by:
getComment
in interfaceDataTypeComponent
-
setComment
public void setComment(java.lang.String comment)
Description copied from interface:DataTypeComponent
Sets the comment for the component.- Specified by:
setComment
in interfaceDataTypeComponent
- Parameters:
comment
- this components comment.
-
getFieldName
public java.lang.String getFieldName()
Description copied from interface:DataTypeComponent
Get the name of the field name as a component of a Data Type.- Specified by:
getFieldName
in interfaceDataTypeComponent
- Returns:
- the name as a component of another Data Type.
-
getDefaultFieldName
public java.lang.String getDefaultFieldName()
Description copied from interface:DataTypeComponent
Returns a default Field name. Used only if a field name is not set.- Specified by:
getDefaultFieldName
in interfaceDataTypeComponent
-
setFieldName
public void setFieldName(java.lang.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 interfaceDataTypeComponent
- 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(java.lang.String fieldName) throws DuplicateNameException
- Throws:
DuplicateNameException
-
getDataType
public DataType getDataType()
Description copied from interface:DataTypeComponent
Returns the dataType in this component.NOTE: If this component corresponds to a structure flexible array the returned data type reflects the base type of the array (e.g., char is returned for a flexible char array).
- Specified by:
getDataType
in interfaceDataTypeComponent
- 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 interfaceDataTypeComponent
- 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 interfaceInternalDataTypeComponent
- Parameters:
ordinal
- updated ordinaloffset
- updated offsetlength
- updated byte length
-
getLength
public int getLength()
Description copied from interface:DataTypeComponent
Get the length of this component.NOTE: The special case of a structure flexible array component returns 0 since its length is undefined.
- Specified by:
getLength
in interfaceDataTypeComponent
- Returns:
- the length of this component or 0 for a structure flexible array.
-
getOrdinal
public int getOrdinal()
Description copied from interface:DataTypeComponent
Get the ordinal position within the parent dataType.NOTE: The special case of a structure flexible array component returns an ordinal equal to the parent structure's
Structure.getNumComponents()
since it is not included in the list of normal components (seeStructure.getFlexibleArrayComponent()
.- Specified by:
getOrdinal
in interfaceDataTypeComponent
- 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 interfaceDataTypeComponent
- Returns:
- a Settings object that is the set of default values for this dataType component
-
setDefaultSettings
public void setDefaultSettings(Settings settings)
Description copied from interface:DataTypeComponent
Set default settings for this dataType.- Specified by:
setDefaultSettings
in interfaceDataTypeComponent
- Parameters:
settings
- the new default settings.
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.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, length, ordinal, field name, and comment.- Specified by:
isEquivalent
in interfaceDataTypeComponent
- 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- Specified by:
setDataType
in interfaceInternalDataTypeComponent
- Parameters:
dt
- the new DataType for this component
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-