Class RKRecord

  • All Implemented Interfaces:
    CellValueRecordInterface

    public class RKRecord
    extends Record
    implements CellValueRecordInterface
    Title: RK Record Description: An internal 32 bit number with the two most significant bits storing the type. This is part of a bizarre scheme to save disk space and memory (gee look at all the other whole records that are in the file just "cause"..,far better to waste processor cycles on this then leave on of those "valuable" records out).

    We support this in READ-ONLY mode. HSSF converts these to NUMBER records

    REFERENCE: PG 376 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

    Version:
    2.0-pre
    Author:
    Andrew C. Oliver (acoliver at apache dot org), Jason Height (jheight at chariot dot net dot au)
    See Also:
    NumberRecord
    • Constructor Detail

      • RKRecord

        public RKRecord()
      • RKRecord

        public RKRecord​(RecordInputStream in)
        Constructs a RK record and sets its fields appropriately.
        Parameters:
        in - the RecordInputstream to read the record from
    • Method Detail

      • validateSid

        protected void validateSid​(short id)
        Description copied from class: Record
        called by constructor, should throw runtime exception in the event of a record passed with a differing ID.
        Specified by:
        validateSid in class Record
        Parameters:
        id - alleged id for this record
      • fillFields

        protected void fillFields​(RecordInputStream in)
        Description copied from class: Record
        called by the constructor, should set class level fields. Should throw runtime exception for bad/icomplete data.
        Specified by:
        fillFields in class Record
        Parameters:
        in - the RecordInputstream to read the record from
      • getRKField

        public int getRKField()
      • getRKType

        public short getRKType()
        Get the type of the number
        Returns:
        one of these values:
        1. RK_IEEE_NUMBER
        2. RK_IEEE_NUMBER_TIMES_100
        3. RK_INTEGER
        4. RK_INTEGER_TIMES_100
      • getRKNumber

        public double getRKNumber()
        Extract the value of the number

        The mechanism for determining the value is dependent on the two low order bits of the raw number. If bit 1 is set, the number is an integer and can be cast directly as a double, otherwise, it's apparently the exponent and mantissa of a double (and the remaining low-order bits of the double's mantissa are 0's).

        If bit 0 is set, the result of the conversion to a double is divided by 100; otherwise, the value is left alone.

        [insert picture of Screwy Squirrel in full Napoleonic regalia]

        Returns:
        the value as a proper double (hey, it could happen)
      • toString

        public String toString()
        Description copied from class: Record
        get a string representation of the record (for biffview/debugging)
        Overrides:
        toString in class Record
      • serialize

        public int serialize​(int offset,
                             byte[] data)
        Description copied from class: Record
        called by the class that is responsible for writing this sucker. Subclasses should implement this so that their data is passed back in a byte array.
        Specified by:
        serialize in class Record
        Parameters:
        offset - to begin writing at
        data - byte array containing instance data
        Returns:
        number of bytes written
      • main

        public static void main​(String[] ignored_args)
        Debugging main()

        Normally I'd do this in a junit test, but let's face it -- once this algorithm has been tested and it works, we are never ever going to change it. This is driven by the Faceless Enemy's minions, who dare not change the algorithm out from under us.

        Parameters:
        ignored_args - command line arguments, which we blithely ignore
      • getSid

        public short getSid()
        Description copied from class: Record
        return the non static version of the id for this record.
        Specified by:
        getSid in class Record
      • isInValueSection

        public boolean isInValueSection()
        Description copied from class: Record
        DBCELL, ROW, VALUES all say yes
        Overrides:
        isInValueSection in class Record
      • isValue

        public boolean isValue()
        Description copied from class: Record
        tells whether this type of record contains a value
        Overrides:
        isValue in class Record