tikhomirov@0: /** tikhomirov@0: * Copyright (c) 2010 Artem Tikhomirov tikhomirov@0: */ tikhomirov@0: package com.tmate.hgkit.ll; tikhomirov@0: tikhomirov@0: import java.io.DataInput; tikhomirov@0: import java.io.IOException; tikhomirov@0: tikhomirov@0: /** tikhomirov@0: * @author artem tikhomirov@0: * tikhomirov@0: */ tikhomirov@0: public class RevlogIndexStreamAccess { tikhomirov@0: tikhomirov@0: private final RevlogStream stream; tikhomirov@0: tikhomirov@0: // takes RevlogStream. RevlogStream delegates calls for data to this accessor, which in turn refers back to RevlogStream to get tikhomirov@0: // correct [Input|Data]Stream according to revlog version (Revlogv0 or RevlogNG) tikhomirov@0: tikhomirov@0: public RevlogIndexStreamAccess(RevlogStream stream) { tikhomirov@0: this.stream = stream; tikhomirov@0: // TODO Auto-generated constructor stub tikhomirov@0: } tikhomirov@0: tikhomirov@0: tikhomirov@0: void readRevlogV0Record() throws IOException { tikhomirov@9: DataInput di = null; //FIXME stream.getIndexStream(); tikhomirov@0: int offset = di.readInt(); tikhomirov@0: int compressedLen = di.readInt(); tikhomirov@0: int baseRevision = di.readInt(); tikhomirov@0: int linkRevision = di.readInt(); tikhomirov@0: // int r = (((buf[0] & 0xff) << 24) | ((buf[1] & 0xff) << 16) | ((buf[2] & 0xff) << 8) | (buf[3] & 0xff)); tikhomirov@0: byte[] buf = new byte[20]; tikhomirov@0: di.readFully(buf, 0, 20); tikhomirov@0: Object nodeidOwn = buf.clone(); tikhomirov@0: // XXX nodeid as an Object with hash/equals? tikhomirov@0: di.readFully(buf, 0, 20); tikhomirov@0: Object nodeidParent1 = buf.clone(); tikhomirov@0: di.readFully(buf, 0, 20); tikhomirov@0: Object nodeidParent2 = buf.clone(); tikhomirov@0: } tikhomirov@0: tikhomirov@0: // another subclass? tikhomirov@0: void readRevlogNGRecord() throws IOException { tikhomirov@9: DataInput di = null; //FIXME stream.getIndexStream(); tikhomirov@0: long l = di.readLong(); tikhomirov@0: long offset = l >>> 16; tikhomirov@0: int flags = (int) (l & 0X0FFFF); tikhomirov@0: int compressedLen = di.readInt(); tikhomirov@0: int actualLen = di.readInt(); tikhomirov@0: int baseRevision = di.readInt(); tikhomirov@0: int linkRevision = di.readInt(); tikhomirov@0: int parent1Revision = di.readInt(); tikhomirov@0: int parent2Revision = di.readInt(); tikhomirov@0: byte[] buf = new byte[32]; tikhomirov@0: di.readFully(buf, 0, 20+12); tikhomirov@0: Object nodeid = buf/*[0..20]*/; tikhomirov@0: tikhomirov@0: } tikhomirov@0: }