SBVTailIndex implements Externalizable, TailIndex { @Override public int get(int nodeId) { if(nodeId == 0){ if(sbv.isZero(0)) return -1; else return 0; } int s = sbv.select0(nodeId); if(sbv.isZero(s + 1)) return -1; return sbv.rank1(s); } SBVTailIndex();  SBVTailIndex(SuccinctBitVector sbv, int size);  SBVTailIndex(byte[] bits, int bitSize, int size); SuccinctBitVector getSbv(); @Override int size(); @Override int get(int nodeId); @Override void readExternal(ObjectInput in); @Override void writeExternal(ObjectOutput out);  }
@Test public void test() throws Exception{ SBVTailIndexBuilder tib = new SBVTailIndexBuilder(); tib.add(0, 0, 10); tib.add(1, 10, 15); TailIndex ti = tib.build(); Assert.assertEquals(0, ti.get(0)); Assert.assertEquals(10, ti.get(1)); }
@Test public void test3() throws Exception{ SBVTailIndexBuilder tib = new SBVTailIndexBuilder(); tib.add(0, 0, 10); tib.add(1, -1, -1); tib.add(2, 10, 15); TailIndex ti = tib.build(); Assert.assertEquals(0, ti.get(0)); Assert.assertEquals(-1, ti.get(1)); Assert.assertEquals(10, ti.get(2)); }
@Test public void test4() throws Exception{ TailIndexBuilder tib = new SBVTailIndexBuilder(); tib.addEmpty(0); tib.addEmpty(1); tib.add(2, 0, 5); tib.add(3, 5, 9); tib.addEmpty(4); tib.add(5, 9, 12); tib.add(6, 12, 16); tib.add(7, 16, 20); TailIndex ti = tib.build(); Assert.assertEquals(-1, ti.get(0)); Assert.assertEquals(-1, ti.get(1)); Assert.assertEquals(0, ti.get(2)); Assert.assertEquals(5, ti.get(3)); Assert.assertEquals(-1, ti.get(4)); Assert.assertEquals(9, ti.get(5)); Assert.assertEquals(12, ti.get(6)); Assert.assertEquals(16, ti.get(7)); }