sclass LineCompSemiCached implements AutoCloseable { File f; // must be the raw text version RandomAccessFile raf; int[] literalOffsets; int[] pairs; Map files; S encoding = "UTF-8"; *(File *f) { if (isGZipFile(f)) fail("Must not be gzipped: " + f2s(f)); LineCompReader reader = new(f); literalOffsets = reader.literalOffsets; pairs = intPairsToIntArray(reader.pairs); files = mapValues toIntArray(reader.versions); raf = randomAccessFileForReading(f); } S getLiteral(int i) { int start = literalOffsets[i]; ret bytesToString(raf_readFilePart(raf, start, literalOffsets[i+1]-start), encoding); } public void close ctex { if (raf != null) raf.close(); } }