1 | |
package org.paneris.bibliomania.fti; |
2 | |
|
3 | 0 | class WordTextSearchResults extends TextSearchResultsBase { |
4 | |
|
5 | 0 | private byte[] data = null; |
6 | 0 | private int dataLength = 0; |
7 | 0 | private int pointer = -1; |
8 | |
private int currentWordIndex, currentOffset; |
9 | |
private Packer wordIndexPacker; |
10 | |
private Packer offsetPacker; |
11 | |
|
12 | |
public int hitWordsCount() { |
13 | 0 | return 1; |
14 | |
} |
15 | |
|
16 | |
public void init() { |
17 | 0 | pointer = 0; |
18 | 0 | wordIndexPacker = OnePacker.it; |
19 | 0 | offsetPacker = OnePacker.it; |
20 | 0 | skipToNextHit(); |
21 | 0 | } |
22 | |
|
23 | |
public void init(byte[] dataP, int dataLengthP) { |
24 | 0 | this.data = dataP; |
25 | 0 | this.dataLength = dataLengthP; |
26 | 0 | init(); |
27 | 0 | } |
28 | |
|
29 | |
public void skipToNextHit() { |
30 | |
for (;;) { |
31 | 0 | if (pointer + wordIndexPacker.numberLength() > dataLength) { |
32 | 0 | pointer = -1; |
33 | 0 | return; |
34 | |
} |
35 | |
|
36 | 0 | currentWordIndex = wordIndexPacker.number(data, pointer); |
37 | 0 | pointer += wordIndexPacker.numberLength(); |
38 | |
|
39 | 0 | if (currentWordIndex == wordIndexPacker.numberMax()) |
40 | 0 | wordIndexPacker = wordIndexPacker.bigger(); |
41 | |
else |
42 | |
break; |
43 | |
} |
44 | |
|
45 | |
for (;;) { |
46 | 0 | if (pointer + offsetPacker.numberLength() > dataLength) { |
47 | 0 | pointer = -1; |
48 | 0 | return; |
49 | |
} |
50 | |
|
51 | 0 | currentOffset = offsetPacker.number(data, pointer); |
52 | 0 | pointer += offsetPacker.numberLength(); |
53 | |
|
54 | 0 | if (currentOffset == offsetPacker.numberMax()) |
55 | 0 | offsetPacker = offsetPacker.bigger(); |
56 | |
else |
57 | |
break; |
58 | |
} |
59 | 0 | } |
60 | |
|
61 | |
public int currentWordIndex() { |
62 | 0 | return pointer == -1 ? -1 : currentWordIndex; |
63 | |
} |
64 | |
|
65 | |
public int currentOffset() { |
66 | 0 | return pointer == -1 ? -1 : currentOffset; |
67 | |
} |
68 | |
|
69 | |
public void close() { |
70 | 0 | } |
71 | |
} |