package aarddict;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public final class {
public final String signature;
public final String sha1sum;
public final UUID uuid;
public final int version;
public final int volume;
public final int of;
public final long metaLength;
public final long indexCount;
public final long articleOffset;
public final String index1ItemFormat;
public final String keyLengthFormat;
public final String articleLengthFormat;
public final long index1Offset;
public final long index2Offset;
public final int index1ItemSize;
public final char keyPointerSpec;
public final char articlePointerSpec;
public final char keyLengthSpec;
public final char articleLengthSpec;
Header(RandomAccessFile file)
throws IOException {
int specLen = 0;
this.signature = file.readUTF8(4);
specLen += 4;
this.sha1sum = file.readUTF8(40);
specLen += 40;
this.version = file.readUnsignedShort();
specLen += 2;
this.uuid = file.readUUID();
specLen += 16;
this.volume = file.readUnsignedShort();
specLen += 2;
this.of = file.readUnsignedShort();
specLen += 2;
this.metaLength = file.readUnsignedInt();
specLen += 4;
this.indexCount = file.readUnsignedInt();
specLen += 4;
this.articleOffset = file.readUnsignedInt();
specLen += 4;
this.index1ItemFormat = file.readUTF8(4);
specLen += 4;
this.keyLengthFormat = file.readUTF8(2);
specLen += 2;
this.keyLengthSpec = this.keyLengthFormat.charAt(1);
this.articleLengthFormat = file.readUTF8(2);
specLen += 2;
this.articleLengthSpec = this.articleLengthFormat.charAt(1);
this.index1ItemSize = calcSize(this.index1ItemFormat);
this.index1Offset = specLen + this.metaLength;
this.index2Offset = this.index1Offset + this.indexCount*this.index1ItemSize;
this.keyPointerSpec = this.index1ItemFormat.charAt(1);
this.articlePointerSpec = this.index1ItemFormat.charAt(2);
}
static Map<Character, Integer> structSizes = new HashMap<Character, Integer>() {
{
put('h', 2);
put('H', 2);
put('i', 4);
put('I', 4);
put('l', 4);
put('L', 4);
put('q', 8);
put('Q', 8);
}
};
static int calcSize(String structSpec) {
int size = 0;
int length = structSpec.length();
for (int i = 1; i < length; i++) {
char c = structSpec.charAt(i);
Integer unitSize = structSizes.get(c);
if (unitSize != null) {
size += unitSize;
}
}
return size;
}
}