first commit
This commit is contained in:
53
hrmsEjb/jxl/write/biff/ExtendedSSTRecord.java
Normal file
53
hrmsEjb/jxl/write/biff/ExtendedSSTRecord.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package jxl.write.biff;
|
||||
|
||||
import jxl.biff.IntegerHelper;
|
||||
import jxl.biff.Type;
|
||||
import jxl.biff.WritableRecordData;
|
||||
|
||||
class ExtendedSSTRecord extends WritableRecordData {
|
||||
private static final int infoRecordSize = 8;
|
||||
|
||||
private int numberOfStrings;
|
||||
|
||||
private int[] absoluteStreamPositions;
|
||||
|
||||
private int[] relativeStreamPositions;
|
||||
|
||||
private int currentStringIndex = 0;
|
||||
|
||||
public ExtendedSSTRecord(int newNumberOfStrings) {
|
||||
super(Type.EXTSST);
|
||||
this.numberOfStrings = newNumberOfStrings;
|
||||
int numberOfBuckets = getNumberOfBuckets();
|
||||
this.absoluteStreamPositions = new int[numberOfBuckets];
|
||||
this.relativeStreamPositions = new int[numberOfBuckets];
|
||||
this.currentStringIndex = 0;
|
||||
}
|
||||
|
||||
public int getNumberOfBuckets() {
|
||||
int numberOfStringsPerBucket = getNumberOfStringsPerBucket();
|
||||
return (numberOfStringsPerBucket != 0) ? ((this.numberOfStrings + numberOfStringsPerBucket - 1) / numberOfStringsPerBucket) : 0;
|
||||
}
|
||||
|
||||
public int getNumberOfStringsPerBucket() {
|
||||
int bucketLimit = 128;
|
||||
return (this.numberOfStrings + 128 - 1) / 128;
|
||||
}
|
||||
|
||||
public void addString(int absoluteStreamPosition, int relativeStreamPosition) {
|
||||
this.absoluteStreamPositions[this.currentStringIndex] = absoluteStreamPosition + relativeStreamPosition;
|
||||
this.relativeStreamPositions[this.currentStringIndex] = relativeStreamPosition;
|
||||
this.currentStringIndex++;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
int numberOfBuckets = getNumberOfBuckets();
|
||||
byte[] data = new byte[2 + 8 * numberOfBuckets];
|
||||
IntegerHelper.getTwoBytes(getNumberOfStringsPerBucket(), data, 0);
|
||||
for (int i = 0; i < numberOfBuckets; i++) {
|
||||
IntegerHelper.getFourBytes(this.absoluteStreamPositions[i], data, 2 + i * 8);
|
||||
IntegerHelper.getTwoBytes(this.relativeStreamPositions[i], data, 6 + i * 8);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user