* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
public class TextIndex {
private static final int REC_SIZE=8;
-
+
private File file;
private DataFile dataFile=null;
-
+
public TextIndex(File theFile) {
file = theFile;
}
-
+
public void open() throws IOException {
dataFile = new DataFile(file,"r");
dataFile.open();
}
-
+
public void close() throws IOException {
if (dataFile!=null) {
dataFile.close();
public int find(Object key, AbsData.Reuse reuse, int offset) throws IOException {
return find(key,reuse.tokenData,reuse.getFieldData(),offset);
}
-
+
public int find(Object key, DataFile.Token dtok, Field df, int offset) throws IOException {
if (dataFile==null) {
throw new IOException("File not opened");
long lhash;
int curr;
while ((max-min)>100) {
- ttok.pos((curr=(min+(max-min)/2))*REC_SIZE);
+ curr=(min+(max-min)/2);
+ ttok.pos(curr*REC_SIZE);
tib.rewind();
lhash = hashToLong(tib.get());
if (lhash<hash) {
break;
}
}
-
+
List<Integer> entries = new ArrayList<>();
for (int i=min;i<=max;++i) {
ttok.pos(i*REC_SIZE);
break;
}
}
-
+
for (Integer i : entries) {
dtok.pos(i);
if (df.at(offset).equals(key)) {
}
return -1;
}
-
+
/*
* Have to change Bytes into a Long, to avoid the inevitable signs in the Hash
}
return rv;
}
-
+
public void create(final Trans trans,final DataFile data, int maxLine, char delim, int fieldOffset, int skipLines) throws IOException {
FileChannel fos;
-
+
List<Idx> list = new LinkedList<>(); // Some hashcodes will double... DO NOT make a set
TimeTaken tt2 = trans.start("Open Files", Env.SUB);
RandomAccessFile raf=null;
} finally {
tt2.done();
}
-
+
try {
-
- Token t = data.new Token(maxLine);
+
+ Token t = data.new Token(maxLine);
Field f = t.new Field(delim);
-
+
int count = 0;
if (skipLines>0) {
trans.info().log("Skipping",skipLines,"line"+(skipLines==1?" in":"s in"),data.file().getName());
}
} finally {
fos.close();
- }
+ }
} finally {
if (raf!=null) {
raf.close(); // closed by fos
}
}
}
-
+
public class Iter {
private int idx;
private Token t;
end = -1L;
}
}
-
+
public int next() {
t.pos(idx);
ib.clear();
return idx<end;
}
}
-
+
private static class Idx implements Comparable<Idx> {
public int hash, pos;
public Idx(Object obj, int pos) {
hash = obj.hashCode();
this.pos = pos;
}
-
+
@Override
public int compareTo(Idx ib) {
long a = hashToLong(hash);