@Override
	public boolean isEquivalent(DataTypeComponent dtc) {
		DataType myDt = getDataType();
		DataType otherDt = dtc.getDataType();
		int otherLength = dtc.getLength();
		DataType myParent = getParent();
		boolean aligned =
			(myParent instanceof Composite) ? ((Composite) myParent).isPackingEnabled() : false;
		// Components don't need to have matching offset when they are aligned, only matching ordinal.
		if ((!aligned && (offset != dtc.getOffset())) ||
			// Components don't need to have matching length when they are aligned. Is this correct?
			(!aligned && (length != otherLength)) || ordinal != dtc.getOrdinal() ||
			!isSameString(getFieldName(), dtc.getFieldName()) ||
			!isSameString(getComment(), dtc.getComment())) {

			return false;
		}
		// if they contain datatypes that have same ids, then we are essentially equivalent.
		return DataTypeUtilities.isSameOrEquivalentDataType(myDt, otherDt);
	}
Create a new DataTypeComponent
@param dataType the dataType for this component
@param parent the dataType that this component belongs to
@param length the length of the dataType in this component.
@param ordinal the index of this component in the parent.
@param offset the byte offset within the parent
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/ReadOnlyDataTypeComponent.java