Class UnionDataType

    • Constructor Detail

      • UnionDataType

        public UnionDataType​(CategoryPath path,
                             java.lang.String name)
        Construct a new UnionDataType
        Parameters:
        path - the category path indicating where this data type is located.
        name - the name of this dataType
      • UnionDataType

        public UnionDataType​(CategoryPath path,
                             java.lang.String name,
                             UniversalID universalID,
                             SourceArchive sourceArchive,
                             long lastChangeTime,
                             long lastChangeTimeInSourceArchive,
                             DataTypeManager dtm)
        Construct a new UnionDataType
        Parameters:
        path - the category path indicating where this data type is located.
        name - the name of this dataType
        dataTypeManager - the data type manager associated with this data type. This can be null. Also, the data type manager may not contain this actual data type.
      • UnionDataType

        public UnionDataType​(java.lang.String name)
        Construct a new UnionDataType
        Parameters:
        name - the name of this dataType
    • Method Detail

      • getRepresentation

        public java.lang.String getRepresentation​(MemBuffer buf,
                                                  Settings settings,
                                                  int length)
        Description copied from interface: DataType
        Get bytes from memory in a printable format for this type.
        Specified by:
        getRepresentation in interface DataType
        Parameters:
        buf - the data.
        settings - the settings to use for the representation.
        length - the number of bytes to represent.
        Returns:
        the representation of the data in this format, never null.
      • isNotYetDefined

        public boolean isNotYetDefined()
        Description copied from interface: DataType
        Indicates if type has not yet been defined. Such types will always return a size of 1. (example: empty structure)
        Specified by:
        isNotYetDefined in interface DataType
        Overrides:
        isNotYetDefined in class DataTypeImpl
        Returns:
        true if this type is not yet defined.
      • getNumComponents

        public int getNumComponents()
        Description copied from interface: Composite
        Gets the number of component data types in this data type.
        Specified by:
        getNumComponents in interface Composite
        Returns:
        the number of components that make up this data prototype
        See Also:
        Composite.getNumComponents()
      • insert

        public DataTypeComponent insert​(int ordinal,
                                        DataType dataType,
                                        int length,
                                        java.lang.String componentName,
                                        java.lang.String comment)
        Description copied from interface: Composite
        Inserts a new datatype at the specified ordinal position in this composite.
        Note: For an aligned structure the ordinal position will get adjusted automatically to provide the proper alignment.
        Specified by:
        insert in interface Composite
        Specified by:
        insert in interface Union
        Parameters:
        ordinal - the ordinal where the new datatype is to be inserted.
        dataType - the datatype to insert.
        length - the length to associate with the datatype.
        componentName - the field name to associate with this component.
        comment - the comment to associate with this component.
        Returns:
        the componentDataType created.
        See Also:
        Composite.insert(int, ghidra.program.model.data.DataType, int, java.lang.String, java.lang.String)
      • getLength

        public int getLength()
        Description copied from interface: DataType
        Get the length (number of 8-bit bytes) of this DataType.
        Specified by:
        getLength in interface DataType
        Returns:
        the length of this DataType
        See Also:
        DataType.getLength()
      • clone

        public DataType clone​(DataTypeManager dtm)
        Description copied from interface: DataType
        Returns a new instance of this DataType with its universalID and SourceArchive identity retained. Note: for built-in DataType's, clone and copy should have the same affect.
        Specified by:
        clone in interface DataType
        Parameters:
        dtm - the data-type manager instance whose data-organization should apply.
      • copy

        public DataType copy​(DataTypeManager dtm)
        Description copied from interface: DataType
        Returns a new instance of this DataType with a new identity. Note: for built-in DataType's, clone and copy should have the same affect.
        Specified by:
        copy in interface DataType
        Parameters:
        dtm - the data-type manager instance whose data-organization should apply.
      • delete

        public void delete​(int ordinal)
        Description copied from interface: Composite
        Deletes the component at the given ordinal position.
        Note: For an aligned structure the delete will have no effect if the ordinal position is a component that provides alignment padding.
        Specified by:
        delete in interface Composite
        Specified by:
        delete in interface Union
        Parameters:
        ordinal - the ordinal of the component to be deleted.
        See Also:
        Composite.delete(int)
      • delete

        public void delete​(int[] ordinals)
        Description copied from interface: Composite
        Deletes the components at the given ordinal positions.
        Note: For an aligned structure the delete will have no effect if the ordinal position is a component that provides alignment padding.
        Specified by:
        delete in interface Composite
        Parameters:
        ordinals - the ordinals of the component to be deleted.
      • isEquivalent

        public boolean isEquivalent​(DataType dt)
        Description copied from interface: DataType
        Returns true if the given dataType is equivalent to this dataType. The precise meaning of "equivalent" is dataType dependent.
        Specified by:
        isEquivalent in interface DataType
        Parameters:
        dt - the dataType being tested for equivalence.
        Returns:
        true if the if the given dataType is equivalent to this dataType.
        See Also:
        DataType.isEquivalent(ghidra.program.model.data.DataType)
      • dataTypeAlignmentChanged

        public void dataTypeAlignmentChanged​(DataType dt)
        Description copied from interface: Composite
        The overall (external) alignment changed for the specified data type. In other words, the data type has a different alignment when placed inside other structures.
        Specified by:
        dataTypeAlignmentChanged in interface Composite
        Parameters:
        dt - the data type whose alignment changed.
      • dataTypeReplaced

        public void dataTypeReplaced​(DataType oldDt,
                                     DataType newDt)
        Description copied from interface: DataType
        Informs this data type that the given oldDT has been replaced with newDT
        TODO: This method is reserved for internal DB use and should be removed from the public DataType interface!!
        Specified by:
        dataTypeReplaced in interface DataType
        Parameters:
        oldDt - old data type
        newDt - new data type
      • replaceWith

        public void replaceWith​(DataType dataType)
        Replaces the internal components of this union with components of the given union.
        Specified by:
        replaceWith in interface DataType
        Overrides:
        replaceWith in class DataTypeImpl
        Parameters:
        dataType - the union to get the component information from.
        Throws:
        java.lang.IllegalArgumentException - if any of the component data types are not allowed to replace a component in this composite data type. For example, suppose dt1 contains dt2. Therefore it is not valid to replace a dt2 component with dt1 since this would cause a cyclic dependency.
      • dependsOn

        public boolean dependsOn​(DataType dt)
        Description copied from interface: DataType
        Returns true if this dataType depends on the existence of the given dataType. For example byte[] depends on byte. If byte were deleted, then byte[] would also be deleted.
        Specified by:
        dependsOn in interface DataType
        Parameters:
        dt - the dataType to test that this dataType depends on.
        See Also:
        DataType.dependsOn(ghidra.program.model.data.DataType)
      • getDefaultLabelPrefix

        public java.lang.String getDefaultLabelPrefix()
        Description copied from interface: DataType
        Returns the appropriate string to use as the default label prefix in the absence of any data.
        Specified by:
        getDefaultLabelPrefix in interface DataType
        Overrides:
        getDefaultLabelPrefix in class DataTypeImpl
        Returns:
        the default label prefix or null if none specified.
      • getPackingValue

        public int getPackingValue()
        Description copied from interface: Composite
        Gets the current packing value (typically a power of 2). If this isn't a packed data type then NOT_PACKING is returned. The packing value only pertains to internally aligned composite data types. Aligned structures allow packing.
        Specified by:
        getPackingValue in interface Composite
        Overrides:
        getPackingValue in class CompositeDataTypeImpl
        Returns:
        the current packing value or NOT_PACKING.
      • setPackingValue

        public void setPackingValue​(int packingValue)
        Description copied from interface: Composite
        Sets the current packing value (usually a power of 2). A value of NOT_PACKING should be passed if this isn't a packed data type. Otherwise this value indicates a maximum alignment for any component within this data type. Calling this method will cause the data type to become an internally aligned data type.
        Note: If a component's data type has a specific external alignment, it will override this value if necessary.
        Specified by:
        setPackingValue in interface Composite
        Overrides:
        setPackingValue in class CompositeDataTypeImpl
        Parameters:
        packingValue - the new packing value or 0NOT_PACKING.
      • adjustInternalAlignment

        public void adjustInternalAlignment()
        Description copied from class: CompositeDataTypeImpl
        Adjusts the internal alignment of components within this composite based on the current settings of the internal alignment, packing, alignment type and minimum alignment value. This method should be called whenever any of the above settings are changed or whenever a components data type is changed or a component is added or removed.
        Specified by:
        adjustInternalAlignment in class CompositeDataTypeImpl
      • realign

        public void realign()
        Description copied from interface: Composite
        Updates the composite to any changes in the data organization. If the composite is not internally aligned, this method does nothing.
        Specified by:
        realign in interface Composite