EftarFile.java revision 0
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * CDDL HEADER START
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms of the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Common Development and Distribution License (the "License").
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You may not use this file except in compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See LICENSE.txt included in this distribution for the specific
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * language governing permissions and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL HEADER in each
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * file and include the License file at LICENSE.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below this CDDL HEADER, with the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * fields enclosed by brackets "[]" replaced with your own identifying
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * information: Portions Copyright [yyyy] [name of copyright owner]
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * CDDL HEADER END
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Use is subject to license terms.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * ident "%Z%%M% %I% %E% SMI"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * An Extremely Fast Tagged Attribute Read-only File System
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Created on October 12, 2005
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * A Eftar File has the following format
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * FILE --> Record ( Record | tagString ) *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Record --> 64bit:Hash 16bit:childrenOffset 16bit:(numberChildren|lenthOfTag) 16bit:tagOffset
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * It is a tree of tagged names,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * doing binary search in sorted list of children
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @author Chandan
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private long offset;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public long hash;
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest public FNode(RandomAccessFile f) throws Throwable {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FNode(long hash, long offset, int childOffset, int num, int tagOffset) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FNode get(long hash, RandomAccessFile f) throws Throwable {
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest return sbinSearch(offset + childOffset, numChildren, hash, f);
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest private FNode sbinSearch(long start, int len, long hash, RandomAccessFile f) throws Throwable {
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest while(b <= e) {
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest int m = (b + e) /2;
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest return new FNode(mhash, (f.getFilePointer() - 8l), f.readUnsignedShort(), f.readUnsignedShort(),f.readUnsignedShort());
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest for(int i = 0 ; i < n; i++) {
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest hash = (hash * 641 + name.charAt(i) * 2969 + hash << 6) % 9322397;
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest private void write(Node n) throws IOException {
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest out.writeShort((short) (childnode.childOffset - offset));
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest out.writeShort((short) childnode.children.size());
0fdab8904a8fe223f6934b878769fe45e7651c60Andrew Forrest out.writeShort((short) childnode.tag.length());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.writeShort((short) (childnode.tagOffset - offset));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void readInput(String tagsPath) throws IOException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader r = new BufferedReader(new FileReader(tagsPath));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringTokenizer toks = new StringTokenizer(path, File.separator);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void write(String outPath) throws FileNotFoundException, IOException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(outPath)));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new Exception("Usage inputFile [inputFile ...] outputFile");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //System.err.println("Took " + (new Date().getTime() - tn.getTime() ) + " msecs to build");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster System.err.println("EftarFile: Error in " + e.getStackTrace()[0] + "\n\t" + e.getMessage());