/** * Constructor, initializing the index structure. * * @param data data reference * @throws IOException I/O Exception */ public FTIndex(final Data data) throws IOException { super(data, true); // cache token length index inY = new DataAccess(data.meta.dbfile(DATAFTX + 'y')); inZ = new DataAccess(data.meta.dbfile(DATAFTX + 'z')); inX = new DataAccess(data.meta.dbfile(DATAFTX + 'x')); tp = new int[data.meta.maxlen + 3]; final int tl = tp.length; for (int i = 0; i < tl; ++i) tp[i] = -1; int is = inX.readNum(); while (--is >= 0) { int p = inX.readNum(); final int r; if (p < tl) { r = inX.read4(); } else { // legacy issue (7.0.2 -> 7.1) r = p << 24 | (inX.read1() & 0xFF) << 16 | (inX.read1() & 0xFF) << 8 | inX.read1() & 0xFF; p = p >> 8 | 0x40; } tp[p] = r; } tp[tl - 1] = (int) inY.length(); }
/** * Reads the size of ftdata from disk. * * @param pt pointer on token * @param lt length of the token * @return size of the ftdata */ private int size(final long pt, final int lt) { return inY.read4(pt + lt + 5); }