Package ghidra.program.model.data
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:
-
Field Summary
Fields inherited from interface ghidra.program.model.data.DataTypeComponent
DEFAULT_FIELD_NAME_PREFIX
-
Constructor Summary
ConstructorDescriptionDataTypeComponentImpl
(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset) Create a new DataTypeComponentDataTypeComponentImpl
(DataType dataType, CompositeDataTypeImpl parent, int length, int ordinal, int offset, String fieldName, String comment) Create a new DataTypeComponent -
Method Summary
Modifier and TypeMethodDescriptionstatic void
checkDefaultFieldName
(String fieldName) boolean
Get the comment for this dataTypeComponent.Returns the dataType in this component.Gets the default settings for this data type component.int
Get the byte offset of where this component ends relative to the start of the parent data type.Get this component's field name within its parent.int
Get the length of this component in 8-bit bytes.int
Get the byte offset of where this component begins relative to the start of the parent data type.int
Get the ordinal position within the parent dataType.returns the dataType that contains this component.static int
getPreferredComponentLength
(DataType dataType, int length) Get the preferred length for a new component.int
hashCode()
boolean
Determine if the specified component corresponds to a bit-field.boolean
Returns true if the given dataTypeComponent is equivalent to this dataTypeComponent.boolean
Determine if the specified component corresponds to a zero-length bit-field.void
setComment
(String comment) Sets the comment for the component.void
setDataType
(DataType dt) Sets the DataType for this component.void
setFieldName
(String name) Sets the field name.toString()
void
update
(int ordinal, int offset, int length) Update component ordinal, offset and length during alignmentMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ghidra.program.model.data.DataTypeComponent
getDefaultFieldName
-
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 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 Details
-
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 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 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.- Specified by:
getEndOffset
in interfaceDataTypeComponent
- Returns:
- offset of end of component relative to the start of the parent data type.
-
getComment
Description copied from interface:DataTypeComponent
Get the comment for this dataTypeComponent.- Specified by:
getComment
in interfaceDataTypeComponent
- Returns:
- component comment string or null if one has not been set
-
setComment
Description copied from interface:DataTypeComponent
Sets the comment for the component.- Specified by:
setComment
in interfaceDataTypeComponent
- Parameters:
comment
- this components comment or null to clear comment.
-
getFieldName
Description copied from interface:DataTypeComponent
Get this component's field name within its parent. If this method returns nullDataTypeComponent.getDefaultFieldName()
can be used to obtain a default generated field name.- Specified by:
getFieldName
in interfaceDataTypeComponent
- Returns:
- this component's field name within its parent or null if one has not been set.
-
setFieldName
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
- Throws:
DuplicateNameException
-
getDataType
Description copied from interface:DataTypeComponent
Returns the dataType in this component.- Specified by:
getDataType
in interfaceDataTypeComponent
- Returns:
- the dataType in this component
-
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 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 interfaceDataTypeComponent
- 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 interfaceDataTypeComponent
- Returns:
- ordinal of this component within the parent data type.
-
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
-
hashCode
public int hashCode() -
equals
-
isEquivalent
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 interfaceDataTypeComponent
- Parameters:
dtc
- the dataTypeComponent being tested for equivalence.- Returns:
- true if the given dataTypeComponent is equivalent to this dataTypeComponent.
-
setDataType
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 interfaceInternalDataTypeComponent
- Parameters:
dt
- the new DataType for this component
-
toString
-
getPreferredComponentLength
Get the preferred length for a new component. The length returned will be no larger than the specified length.- Parameters:
dataType
- new component datatypelength
- 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 aDynamic
dataType.
-