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 AbstractDataType
        Returns:
        true if this type is not yet defined.
      • getComponent

        public DataTypeComponent getComponent​(int ordinal)
        Description copied from interface: Composite
        Returns the component of this data type with the indicated ordinal.
        Specified by:
        getComponent in interface Composite
        Parameters:
        ordinal - the component's ordinal (zero based).
        Returns:
        the data type component.
      • getComponents

        public DataTypeComponent[] getComponents()
        Description copied from interface: Composite
        Returns an array of Data Type Components that make up this data type. Returns an array of length 0 if there are no subcomponents.
        Specified by:
        getComponents in interface Composite
      • 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
      • add

        public DataTypeComponent add​(DataType dataType,
                                     int length,
                                     java.lang.String componentName,
                                     java.lang.String comment)
        Description copied from interface: Composite
        Adds a new datatype to the end of this composite. This is the preferred method to use for adding components to an aligned structure for dynamic dataTypes such as strings whose length must be specified.
        Specified by:
        add in interface Composite
        Parameters:
        dataType - the datatype to add.
        length - the length to associate with the datatype. For fixed length types a length <= 0 will use the length of the resolved dataType.
        componentName - the field name to associate with this component.
        comment - the comment to associate with this component.
        Returns:
        the componentDataType created.
      • 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
        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. For fixed length types a length <= 0 will use the length of the resolved dataType.
        componentName - the field name to associate with this component.
        comment - the comment to associate with this component.
        Returns:
        the componentDataType created.
      • addBitField

        public DataTypeComponent addBitField​(DataType baseDataType,
                                             int bitSize,
                                             java.lang.String componentName,
                                             java.lang.String comment)
                                      throws InvalidDataTypeException
        Description copied from interface: Composite
        Adds a new bitfield to the end of this composite. This method is intended to be used with aligned structures/unions only where the bitfield will be appropriately packed. The minimum storage storage byte size will be applied. It will not provide useful results within unaligned composites.
        Specified by:
        addBitField in interface Composite
        Parameters:
        baseDataType - the bitfield base datatype (certain restrictions apply).
        bitSize - the bitfield size in bits
        componentName - the field name to associate with this component.
        comment - the comment to associate with this component.
        Returns:
        the componentDataType created whose associated data type will be BitFieldDataType.
        Throws:
        InvalidDataTypeException - if the specified data type is not a valid base type for bitfields.
      • insertBitField

        public DataTypeComponent insertBitField​(int ordinal,
                                                DataType baseDataType,
                                                int bitSize,
                                                java.lang.String componentName,
                                                java.lang.String comment)
                                         throws InvalidDataTypeException,
                                                java.lang.ArrayIndexOutOfBoundsException
        Description copied from interface: Union
        Inserts a new bitfield at the specified ordinal position in this union. For both aligned and unaligned unions the bitfield starts with bit-0 (lsb) of the first byte for little-endian, and with bit-7 (msb) of the first byte for big-endian. This is the default behavior for most compilers. Insertion behavior may not work as expected if packing rules differ from this.
        Specified by:
        insertBitField in interface Union
        Parameters:
        ordinal - the ordinal where the new datatype is to be inserted.
        baseDataType - the bitfield base datatype (certain restrictions apply).
        bitSize - the declared bitfield size in bits. The effective bit size may be adjusted based upon the specified baseDataType.
        componentName - the field name to associate with this component.
        comment - the comment to associate with this component.
        Returns:
        the bitfield component created whose associated data type will be BitFieldDataType.
        Throws:
        InvalidDataTypeException - if the specified baseDataType is not a valid base type for bitfields.
        java.lang.ArrayIndexOutOfBoundsException - if ordinal is less than 0 or greater than the current number of components.
      • 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
      • 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: Removal of bitfields from an unaligned structure will not shift other components with vacated bytes reverting to undefined.
        Specified by:
        delete in interface Composite
        Parameters:
        ordinal - the ordinal of the component to be deleted.
      • delete

        public void delete​(int[] ordinals)
        Description copied from interface: Composite
        Deletes the components at the given ordinal positions.
        Note: Removal of bitfields from an unaligned structure will not shift other components with vacated bytes reverting to undefined.
        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.
      • 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.
      • dataTypeSizeChanged

        public void dataTypeSizeChanged​(DataType dt)
        Description copied from interface: DataType
        Notification that the given dataType's size has changed. DataTypes may need to make internal changes in response.
        TODO: This method is reserved for internal DB use and should be removed from the public DataType interface!!
        Specified by:
        dataTypeSizeChanged in interface DataType
        Overrides:
        dataTypeSizeChanged in class AbstractDataType
        Parameters:
        dt - the dataType that has 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
        Overrides:
        dataTypeReplaced in class AbstractDataType
        Parameters:
        oldDt - old data type
        newDt - new data type
      • dataTypeDeleted

        public void dataTypeDeleted​(DataType dt)
        Description copied from interface: DataType
        Informs this dataType that the given dataType has been deleted.
        TODO: This method is reserved for internal DB use and should be removed from the public DataType interface!!
        Specified by:
        dataTypeDeleted in interface DataType
        Overrides:
        dataTypeDeleted in class AbstractDataType
        Parameters:
        dt - the dataType that has been deleted.
      • 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.
      • dataTypeNameChanged

        public void dataTypeNameChanged​(DataType dt,
                                        java.lang.String oldName)
        Description copied from interface: DataType
        Informs this data type that its name has changed from the indicated old name.
        TODO: This method is reserved for internal DB use and should be removed from the public DataType interface!!
        Specified by:
        dataTypeNameChanged in interface DataType
        Overrides:
        dataTypeNameChanged in class AbstractDataType
        Parameters:
        dt - the data type whose name changed
        oldName - the data type's old name
      • 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
        Overrides:
        dependsOn in class AbstractDataType
        Parameters:
        dt - the dataType to test that this dataType depends on.
      • 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 AbstractDataType
        Returns:
        the default label prefix or null if none specified.
      • 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
      • 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