Class StructureDataType

    • Field Detail

      • structLength

        protected int structLength
      • numComponents

        protected int numComponents
    • Constructor Detail

      • StructureDataType

        public StructureDataType​(java.lang.String name,
                                 int length)
        Construct a new structure with the given name and length. The root category will be used.
        Parameters:
        name - the name of the new structure
        length - the initial size of the structure in bytes. If 0 is specified the structure will report its length as 1 and isNotYetDefined() will return true.
      • StructureDataType

        public StructureDataType​(java.lang.String name,
                                 int length,
                                 DataTypeManager dtm)
        Construct a new structure with the given name, length and datatype manager which conveys data organization. The root category will be used.
        Parameters:
        name - the name of the new structure
        length - the initial size of the structure in bytes. If 0 is specified the structure will report its length as 1 and isNotYetDefined() will return true.
        dtm - the data type manager associated with this data type. This can be null. Also, the data type manager may not yet contain this actual data type.
      • StructureDataType

        public StructureDataType​(CategoryPath path,
                                 java.lang.String name,
                                 int length)
        Construct a new structure with the given name and length within the specified categry path.
        Parameters:
        path - the category path indicating where this data type is located.
        name - the name of the new structure
        length - the initial size of the structure in bytes. If 0 is specified the structure will report its length as 1 and isNotYetDefined() will return true.
      • StructureDataType

        public StructureDataType​(CategoryPath path,
                                 java.lang.String name,
                                 int length,
                                 DataTypeManager dtm)
        Construct a new structure with the given name, length and datatype manager within the specified categry path.
        Parameters:
        path - the category path indicating where this data type is located.
        name - the name of the new structure
        length - the initial size of the structure in bytes. If 0 is specified the structure will report its length as 1 and isNotYetDefined() will return true.
        dtm - the data type manager associated with this data type. This can be null. Also, the data type manager may not yet contain this actual data type.
      • StructureDataType

        public StructureDataType​(CategoryPath path,
                                 java.lang.String name,
                                 int length,
                                 UniversalID universalID,
                                 SourceArchive sourceArchive,
                                 long lastChangeTime,
                                 long lastChangeTimeInSourceArchive,
                                 DataTypeManager dtm)
        Construct a new structure with the given name and length
        Parameters:
        path - the category path indicating where this data type is located.
        name - the name of the new structure
        length - the initial size of the structure in bytes. If 0 is specified the structure will report its length as 1 and isNotYetDefined() will return true.
        universalID - the id for the data type
        sourceArchive - the source archive for this data type
        lastChangeTime - the last time this data type was changed
        lastChangeTimeInSourceArchive - the last time this data type was changed in its source archive.
        dtm - the data type manager associated with this data type. This can be null. Also, the data type manager may not yet contain this actual data type.
    • 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.
      • getComponentAt

        public DataTypeComponent getComponentAt​(int offset)
        Description copied from interface: Structure
        Gets the immediate child component that contains the byte at the given offset. If the specified offset corresponds to a bit-field,the first bit-field component containing the offset will be returned.
        Specified by:
        getComponentAt in interface Structure
        Parameters:
        offset - the byte offset into this data type
        Returns:
        the immediate child component.
      • getDataTypeAt

        public DataTypeComponent getDataTypeAt​(int offset)
        Description copied from interface: Structure
        Returns the primitive Data Type that is at this offset. This is useful for prototypes that have components that are made up of other components If the specified offset corresponds to a bit-field,the BitFieldDataType of the first bit-field component containing the offset will be returned.
        Specified by:
        getDataTypeAt in interface Structure
        Parameters:
        offset - the byte offset into this data type.
        Returns:
        the primitive data type at the offset.
      • isZeroLength

        public boolean isZeroLength()
        Description copied from interface: DataType
        Indicates is this datatype is defined with a zero length. This method should not be confused with DataType.isNotYetDefined() which indicates that nothing but the name and basic type is known. NOTE: Support for zero-length datatypes is not yet fully supported, as a result they will generally return a non-zero length.
        Specified by:
        isZeroLength in interface DataType
        Overrides:
        isZeroLength in class AbstractDataType
        Returns:
        true if type definition has a length of 0 even though it may report a length of 1, else false.
      • 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
      • delete

        public void delete​(int ordinal)
        Description copied from interface: Composite
        Deletes the component at the given ordinal position.
        Note: Removal of bitfields from a structure with packing disabled will not shift other components causing vacated bytes to revert to undefined filler.
        Specified by:
        delete in interface Composite
        Parameters:
        ordinal - the ordinal of the component to be deleted.
      • delete

        public void delete​(java.util.Set<java.lang.Integer> ordinals)
        Description copied from interface: Composite
        Deletes the specified set of components at the given ordinal positions.
        Note: Removal of bitfields from a structure with packing disabled will not shift other components causing vacated bytes to revert to undefined filler.
        Specified by:
        delete in interface Composite
        Parameters:
        ordinals - the ordinals of the component to be deleted.
      • shiftOffset

        protected void shiftOffset​(DataTypeComponentImpl dtc,
                                   int deltaOrdinal,
                                   int deltaOffset)
      • getNumComponents

        public int getNumComponents()
        Description copied from interface: Composite
        Gets the number of component data types in this composite. If this is Structure with packing disabled, the count will include all undefined filler components which may be present. In addition, Structures do not include the optional trailing flexible array component in this count (see Structure.hasFlexibleArrayComponent()).
        Specified by:
        getNumComponents in interface Composite
        Returns:
        the number of components that make up this composite
      • getNumDefinedComponents

        public int getNumDefinedComponents()
        Description copied from interface: Composite
        Returns the number of explicitly defined components in this composite. For Unions and packed Structures this is equivalent to Composite.getNumComponents() since they do not contain undefined components. This count will always exclude all undefined filler components which may be present within a Structure whoose packing is disabled (see Composite.isPackingEnabled()). In addition, Structures do not include the optional trailing flexible array component in this count (see Structure.hasFlexibleArrayComponent()).
        Specified by:
        getNumDefinedComponents in interface Composite
        Returns:
        the number of explicitly defined components in this composite
      • getPreferredComponentLength

        protected int getPreferredComponentLength​(DataType dataType,
                                                  int length)
        Description copied from class: CompositeDataTypeImpl
        Get the preferred length for a new component. For Unions and internally aligned structures the preferred component length for a fixed-length dataType will be the length of that dataType. Otherwise the length returned will be no larger than the specified length.
        Overrides:
        getPreferredComponentLength in class CompositeDataTypeImpl
        Parameters:
        dataType - new component datatype
        length - 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
      • insertAtOffset

        public final DataTypeComponentImpl insertAtOffset​(int offset,
                                                          DataType dataType,
                                                          int length)
        Description copied from interface: Structure
        Inserts a new datatype at the specified offset into this structure. Inserting a component will causing any conflicting component to shift down to the extent necessary to avoid a conflict.
        Specified by:
        insertAtOffset in interface Structure
        Parameters:
        offset - the byte offset into the structure 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.
        Returns:
        the componentDataType created.
      • insertAtOffset

        public DataTypeComponentImpl insertAtOffset​(int offset,
                                                    DataType dataType,
                                                    int length,
                                                    java.lang.String componentName,
                                                    java.lang.String comment)
                                             throws java.lang.IllegalArgumentException
        Description copied from interface: Structure
        Inserts a new datatype at the specified offset into this structure. Inserting a component will causing any conflicting component to shift down to the extent necessary to avoid a conflict.
        Specified by:
        insertAtOffset in interface Structure
        Parameters:
        offset - the byte offset into the structure 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.
        Throws:
        java.lang.IllegalArgumentException - if the specified data type is not allowed to be inserted into this composite data type or an invalid length is specified. For example, suppose dt1 contains dt2. Therefore it is not valid to insert dt1 to dt2 since this would cause a cyclic dependency.
      • 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.
      • growStructure

        public void growStructure​(int amount)
        Description copied from interface: Structure
        Increases the size of the structure by the given amount by adding undefined filler at the end of the structure. NOTE: This method only has an affect on structures with packing disabled.
        Specified by:
        growStructure in interface Structure
        Parameters:
        amount - the amount by which to grow the structure.
      • insert

        public DataTypeComponent insert​(int index,
                                        DataType dataType,
                                        int length,
                                        java.lang.String componentName,
                                        java.lang.String comment)
                                 throws java.lang.IndexOutOfBoundsException,
                                        java.lang.IllegalArgumentException
        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:
        index - 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.
        Throws:
        java.lang.IndexOutOfBoundsException - if component ordinal is out of bounds
        java.lang.IllegalArgumentException - if the specified data type is not allowed to be inserted into this composite data type or an invalid length is specified. For example, suppose dt1 contains dt2. Therefore it is not valid to insert dt1 to dt2 since this would cause a cyclic dependency.
      • 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 packed 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 for composites with packing disabled.
        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,
                                                int byteWidth,
                                                int bitOffset,
                                                DataType baseDataType,
                                                int bitSize,
                                                java.lang.String componentName,
                                                java.lang.String comment)
                                         throws InvalidDataTypeException,
                                                java.lang.IndexOutOfBoundsException
        Description copied from interface: Structure
        Inserts a new bitfield at the specified ordinal position in this structure. Within packed structures the specified byteWidth and bitOffset will be ignored since packing will occur at the specified ordinal position. The resulting component length and bitfield details will reflect the use of minimal storage sizing.

        For structures with packing disabled, a component shift will only occur if the bitfield placement conflicts with another component. If no conflict occurs, the bitfield will be placed at the specified location consuming any DEFAULT components as needed. When a conflict does occur a shift will be performed at the ordinal position based upon the specified byteWidth. When located onto existing bitfields they will be packed together provided they do not conflict, otherwise the conflict rule above applies.

        Supported packing 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 Structure
        Parameters:
        ordinal - the ordinal of the component to be inserted.
        byteWidth - the storage allocation unit width which contains the bitfield. Must be large enough to contain the "effective bit size" and corresponding bitOffset. The actual component size used will be recomputed during insertion.
        bitOffset - corresponds to the bitfield left-shift amount with the storage unit when viewed as big-endian. The final offset may be reduced based upon the minimal storage size determined during insertion.
        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.IndexOutOfBoundsException - if ordinal is less than 0 or greater than the current number of components.
      • insertBitFieldAt

        public DataTypeComponentImpl insertBitFieldAt​(int byteOffset,
                                                      int byteWidth,
                                                      int bitOffset,
                                                      DataType baseDataType,
                                                      int bitSize,
                                                      java.lang.String componentName,
                                                      java.lang.String comment)
                                               throws InvalidDataTypeException
        Description copied from interface: Structure
        Inserts a new bitfield at the specified location in this composite. This method is intended to be used with structures with packing disabled where the bitfield will be precisely placed. Within an packed structure the specified byteOffset, byteWidth and bitOffset will be used to identify the appropriate ordinal but may not be preserved. The component length will be computed based upon the specified parameters and will be reduced from byteWidth to its minimal size for the new component.

        When packing disabled, a component shift will only occur if the bitfield placement conflicts with another component. If no conflict occurs, the bitfield will be placed at the specified location consuming any DEFAULT components as needed. When a conflict does occur a shift will be performed at the point of conflict based upon the specified byteWidth. When located onto existing bitfields they will be packed together provided they do not conflict, otherwise the conflict rule above applies.

        Supported packing for little-endian fills lsb first, whereas big-endian fills msb first. Insertion behavior may not work as expected if packing rules differ from this.

        Zero length bitfields may be inserted although they have no real affect when packing disabled. Only the resulting byte offset within the structure is of significance in determining its ordinal placement.

        Specified by:
        insertBitFieldAt in interface Structure
        Parameters:
        byteOffset - the first byte offset within this structure which corresponds to the first byte of the specified storage unit identified by its byteWidth.
        byteWidth - the storage unit width which contains the bitfield. Must be large enough to contain the specified bitSize and corresponding bitOffset. The actual component size used will be recomputed during insertion.
        bitOffset - corresponds to the bitfield left-shift amount with the storage unit when viewed as big-endian. The final offset may be reduced based upon the minimal storage size determined during insertion.
        baseDataType - the bitfield base datatype (certain restrictions apply).
        bitSize - the bitfield size in bits. A bitSize of 0 may be specified although its name will be ignored.
        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.
      • deleteAtOffset

        public void deleteAtOffset​(int offset)
        Description copied from interface: Structure
        Deletes the component containing the specified offset in this structure. If the offset corresponds to a bit-field, all bit-fields whose base type group contains the offset will be removed.
        Specified by:
        deleteAtOffset in interface Structure
        Parameters:
        offset - the byte offset into the structure where the datatype is to be deleted.
      • isEquivalent

        public boolean isEquivalent​(DataType dataType)
        Description copied from interface: DataType
        Returns true if the given dataType is equivalent to this dataType. The precise meaning of "equivalent" is dataType dependent.
        NOTE: if invoked by a DB object or manager it should be invoked on the DataTypeDB object passing the other datatype as the argument.
        Specified by:
        isEquivalent in interface DataType
        Parameters:
        dataType - the dataType being tested for equivalence.
        Returns:
        true if the if the given dataType is equivalent to this dataType.
      • 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.
        Specified by:
        dataTypeSizeChanged in interface DataType
        Overrides:
        dataTypeSizeChanged in class AbstractDataType
        Parameters:
        dt - the dataType that has changed.
      • copy

        public DataType copy​(DataTypeManager dtm)
        Create copy of structure for target dtm (source archive information is discarded).

        WARNING! copying non-packed structures which contain bitfields can produce invalid results when switching endianess due to the differences in packing order.

        Specified by:
        copy in interface DataType
        Parameters:
        dtm - target data type manager
        Returns:
        cloned structure
      • clone

        public StructureDataType clone​(DataTypeManager dtm)
        Create cloned structure for target dtm preserving source archive information. WARNING! cloning non-packed structures which contain bitfields can produce invalid results when switching endianess due to the differences in packing order.
        Specified by:
        clone in interface DataType
        Specified by:
        clone in interface Structure
        Parameters:
        dtm - target data type manager
        Returns:
        cloned structure
      • clearComponent

        public void clearComponent​(int ordinal)
        Description copied from interface: Structure
        Clears the defined component at the given component ordinal. Clearing a component within a non-packed structure causes a defined component to be replaced with a number of undefined dataTypes to offset the removal of the defined dataType. In the case of a packed structure the component is deleted without backfill.
        Specified by:
        clearComponent in interface Structure
        Parameters:
        ordinal - the ordinal of the component to clear.
      • replaceWith

        public void replaceWith​(DataType dataType)
        Replaces the internal components of this structure with components of the given structure including packing and alignment settings.
        Specified by:
        replaceWith in interface DataType
        Overrides:
        replaceWith in class DataTypeImpl
        Parameters:
        dataType - the structure 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.
      • 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.
        Specified by:
        dataTypeDeleted in interface DataType
        Overrides:
        dataTypeDeleted in class AbstractDataType
        Parameters:
        dt - the dataType that has been deleted.
      • dataTypeReplaced

        public void dataTypeReplaced​(DataType oldDt,
                                     DataType replacementDt)
                              throws java.lang.IllegalArgumentException
        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.
        Specified by:
        dataTypeReplaced in interface DataType
        Overrides:
        dataTypeReplaced in class AbstractDataType
        Parameters:
        oldDt - old data type
        replacementDt - new data type
        Throws:
        java.lang.IllegalArgumentException
      • getComponents

        public DataTypeComponent[] getComponents()
        Description copied from interface: Composite
        Returns an array of Data Type Components that make up this composite including undefined filler components which may be present within a Structure whch has packing disabled. Structures do not include the optional trailing flexible array component in the returned array. The number of components corresponds to Composite.getNumComponents().
        Specified by:
        getComponents in interface Composite
        Returns:
        array all components
      • replace

        public DataTypeComponent replace​(int index,
                                         DataType dataType,
                                         int length,
                                         java.lang.String componentName,
                                         java.lang.String comment)
                                  throws java.lang.IndexOutOfBoundsException,
                                         java.lang.IllegalArgumentException
        Description copied from interface: Structure
        Replaces the component at the given component ordinal with a new component of the indicated data type.
        Specified by:
        replace in interface Structure
        Parameters:
        index - the ordinal of the component to be replaced.
        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 new component.
        Throws:
        java.lang.IndexOutOfBoundsException - if component ordinal is out of bounds
        java.lang.IllegalArgumentException - if the specified data type is not allowed to replace a component in this composite data type or an invalid length is specified. 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. In addition, any attempt to replace an existing bit-field component or specify a BitFieldDataType will produce this error.
      • replace

        public final DataTypeComponent replace​(int index,
                                               DataType dataType,
                                               int length)
        Description copied from interface: Structure
        Replaces the component at the given component ordinal with a new component of the indicated data type.
        Specified by:
        replace in interface Structure
        Parameters:
        index - the ordinal of the component to be replaced.
        dataType - the datatype to insert.
        length - the length of the dataType to insert. For fixed length types a length <= 0 will use the length of the resolved dataType.
        Returns:
        the new component
      • replaceAtOffset

        public DataTypeComponent replaceAtOffset​(int offset,
                                                 DataType dataType,
                                                 int length,
                                                 java.lang.String componentName,
                                                 java.lang.String comment)
                                          throws java.lang.IllegalArgumentException
        Description copied from interface: Structure
        Replaces the component at the specified byte offset with a new component of the indicated data type. If the offset corresponds to a bit-field, all bit-fields at that offset will be removed and replaced by the specified component. Keep in mind bit-field or any component removal must clear sufficient space in a structure with packing disabled to complete the replacement.
        Specified by:
        replaceAtOffset in interface Structure
        Parameters:
        offset - the byte offset into the structure where the datatype is to be replaced.
        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 new component.
        Throws:
        java.lang.IllegalArgumentException - if the specified data type is not allowed to replace a component in this composite data type or an invalid length is specified. 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. In addition, any attempt to replace an existing bit-field component or specify a BitFieldDataType will produce this error.
      • getNumUndefinedBytes

        protected int getNumUndefinedBytes​(int index)
        Gets the number of Undefined bytes beginning at the indicated component index. Undefined bytes that have a field name or comment specified are also included.
        Parameters:
        index - the component index to begin checking at.
        Returns:
        the number of contiguous undefined bytes
      • 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.
        Returns:
        true if the existence of this datatype relies on the existence of the specified datatype dt.
      • deleteAll

        public void deleteAll()
        Description copied from interface: Structure
        Remove all components from this structure (including flex-array), effectively setting the length to zero. Packing and minimum alignment settings are unaffected.
        Specified by:
        deleteAll in interface Structure
      • 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.
      • repack

        public boolean repack​(boolean notify)
        Description copied from class: CompositeDataTypeImpl
        Repack components within this composite based on the current packing, alignment and DataOrganization settings. Non-packed Structures: change detection is limited to component count and length is assumed to already be correct.

        NOTE: If modifications to stored length are made prior to invoking this method, detection of a size change may not be possible.

        NOTE: Currently a change in calculated alignment can not be provided since this value is not stored.

        Specified by:
        repack in class CompositeDataTypeImpl
        Parameters:
        notify - if true notification will be sent to parents if a size change or component placement change is detected.
        Returns:
        true if a layout change was detected.
      • hasFlexibleArrayComponent

        public boolean hasFlexibleArrayComponent()
        Description copied from interface: Structure
        Determine if a trailing flexible array component has been defined.
        Specified by:
        hasFlexibleArrayComponent in interface Structure
        Returns:
        true if trailing flexible array component has been defined.
      • getFlexibleArrayComponent

        public DataTypeComponent getFlexibleArrayComponent()
        Description copied from interface: Structure
        Get the optional trailing flexible array component associated with this structure.

        NOTE: The trailing flexable array may be assigned an incorrect offset when packing is enabled and the minimum alignment is specified. In such cases, the flex array may be less than the overall structure length. Currently, it is assumed the trailing flex array will have an offset equal to the overall structure length.

        Specified by:
        getFlexibleArrayComponent in interface Structure
        Returns:
        optional trailing flexible array component associated with this structure or null if not present.
      • setFlexibleArrayComponent

        public DataTypeComponent setFlexibleArrayComponent​(DataType flexType,
                                                           java.lang.String name,
                                                           java.lang.String comment)
        Description copied from interface: Structure
        Set the optional trailing flexible array component associated with this structure.
        Specified by:
        setFlexibleArrayComponent in interface Structure
        Parameters:
        flexType - the flexible array dataType (example: for 'char[0]' the type 'char' should be specified)
        name - component field name or null for default name
        comment - component comment
        Returns:
        updated flexible array component
      • clearFlexibleArrayComponent

        public void clearFlexibleArrayComponent()
        Description copied from interface: Structure
        Remove the optional trailing flexible array component associated with this structure.
        Specified by:
        clearFlexibleArrayComponent in interface Structure