blob: 724ed5abfc784647ba504913b3873c661e391d45 [file] [log] [blame]
Index: solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
===================================================================
--- solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java (revision 1206547)
+++ solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java (working copy)
@@ -23,6 +23,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.OpenBitSet;
+import org.apache.lucene.util.StringHelper;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
@@ -301,7 +302,7 @@
toDeState.minSetSizeCached = minDocFreqTo;
while (term != null) {
- if (prefix != null && !term.startsWith(prefix))
+ if (prefix != null && !StringHelper.startsWith(term, prefix))
break;
fromTermCount++;
Index: solr/core/src/java/org/apache/solr/request/SimpleFacets.java
===================================================================
--- solr/core/src/java/org/apache/solr/request/SimpleFacets.java (revision 1206547)
+++ solr/core/src/java/org/apache/solr/request/SimpleFacets.java (working copy)
@@ -656,7 +656,7 @@
if (docs.size() >= mincount) {
while (term != null) {
- if (startTermBytes != null && !term.startsWith(startTermBytes))
+ if (startTermBytes != null && !StringHelper.startsWith(term, startTermBytes))
break;
int df = termsEnum.docFreq();
Index: solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
===================================================================
--- solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java (revision 1206547)
+++ solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java (working copy)
@@ -19,6 +19,7 @@
import org.apache.lucene.index.*;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
+import org.apache.lucene.util.StringHelper;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.*;
import org.apache.solr.common.util.NamedList;
@@ -183,7 +184,7 @@
boolean externalized = false; // did we fill in "external" yet for this term?
// stop if the prefix doesn't match
- if (prefixBytes != null && !term.startsWith(prefixBytes)) break;
+ if (prefixBytes != null && !StringHelper.startsWith(term, prefixBytes)) break;
if (pattern != null) {
// indexed text or external text?
Index: modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndTruncQuery.java
===================================================================
--- modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndTruncQuery.java (revision 1206547)
+++ modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndTruncQuery.java (working copy)
@@ -20,6 +20,7 @@
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.index.Terms;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiFields;
@@ -106,7 +107,7 @@
}
while(text != null) {
- if (text != null && text.startsWith(prefixRef)) {
+ if (text != null && StringHelper.startsWith(text, prefixRef)) {
String textString = text.utf8ToString();
matcher.reset(textString.substring(prefixLength));
if (matcher.matches()) {
Index: modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndPrefixQuery.java
===================================================================
--- modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndPrefixQuery.java (revision 1206547)
+++ modules/queryparser/src/java/org/apache/lucene/queryparser/surround/query/SrndPrefixQuery.java (working copy)
@@ -19,6 +19,7 @@
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiFields;
@@ -67,7 +68,7 @@
if (status == TermsEnum.SeekStatus.FOUND) {
mtv.visitMatchingTerm(getLucenePrefixTerm(fieldName));
} else if (status == TermsEnum.SeekStatus.NOT_FOUND) {
- if (termsEnum.term().startsWith(prefixRef)) {
+ if (StringHelper.startsWith(termsEnum.term(), prefixRef)) {
mtv.visitMatchingTerm(new Term(fieldName, termsEnum.term().utf8ToString()));
} else {
skip = true;
@@ -80,7 +81,7 @@
if (!skip) {
while(true) {
BytesRef text = termsEnum.next();
- if (text != null && text.startsWith(prefixRef)) {
+ if (text != null && StringHelper.startsWith(text, prefixRef)) {
mtv.visitMatchingTerm(new Term(fieldName, text.utf8ToString()));
} else {
break;
Index: lucene/contrib/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/RegexTermsEnum.java
===================================================================
--- lucene/contrib/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/RegexTermsEnum.java (revision 1206547)
+++ lucene/contrib/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/RegexTermsEnum.java (working copy)
@@ -21,6 +21,7 @@
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.StringHelper;
import java.io.IOException;
@@ -53,7 +54,7 @@
@Override
protected AcceptStatus accept(BytesRef term) {
- if (term.startsWith(prefixRef)) {
+ if (StringHelper.startsWith(term, prefixRef)) {
// TODO: set BoostAttr based on distance of
// searchTerm.text() and term().text()
return regexImpl.match(term) ? AcceptStatus.YES : AcceptStatus.NO;
Index: lucene/src/test/org/apache/lucene/search/TestPrefixRandom.java
===================================================================
--- lucene/src/test/org/apache/lucene/search/TestPrefixRandom.java (revision 1206547)
+++ lucene/src/test/org/apache/lucene/search/TestPrefixRandom.java (working copy)
@@ -35,6 +35,7 @@
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util._TestUtil;
/**
@@ -104,7 +105,7 @@
@Override
protected AcceptStatus accept(BytesRef term) throws IOException {
- return term.startsWith(prefix) ? AcceptStatus.YES : AcceptStatus.NO;
+ return StringHelper.startsWith(term, prefix) ? AcceptStatus.YES : AcceptStatus.NO;
}
}
Index: lucene/src/test/org/apache/lucene/index/TestDocTermOrds.java
===================================================================
--- lucene/src/test/org/apache/lucene/index/TestDocTermOrds.java (revision 1206547)
+++ lucene/src/test/org/apache/lucene/index/TestDocTermOrds.java (working copy)
@@ -37,6 +37,7 @@
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util._TestUtil;
// TODO:
@@ -262,7 +263,7 @@
final int[] docOrds = idToOrds[id];
final List<Integer> newOrds = new ArrayList<Integer>();
for(int ord : idToOrds[id]) {
- if (termsArray[ord].startsWith(prefixRef)) {
+ if (StringHelper.startsWith(termsArray[ord], prefixRef)) {
newOrds.add(ord);
}
}
@@ -332,7 +333,7 @@
TermsEnum termsEnum = terms.iterator(null);
TermsEnum.SeekStatus result = termsEnum.seekCeil(prefixRef, false);
if (result != TermsEnum.SeekStatus.END) {
- assertFalse("term=" + termsEnum.term().utf8ToString() + " matches prefix=" + prefixRef.utf8ToString(), termsEnum.term().startsWith(prefixRef));
+ assertFalse("term=" + termsEnum.term().utf8ToString() + " matches prefix=" + prefixRef.utf8ToString(), StringHelper.startsWith(termsEnum.term(), prefixRef));
} else {
// ok
}
Index: lucene/src/java/org/apache/lucene/search/PrefixTermsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/PrefixTermsEnum.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/search/PrefixTermsEnum.java (working copy)
@@ -22,6 +22,7 @@
import org.apache.lucene.index.FilteredTermsEnum;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.StringHelper;
/**
* Subclass of FilteredTermEnum for enumerating all terms that match the
@@ -41,7 +42,7 @@
@Override
protected AcceptStatus accept(BytesRef term) {
- if (term.startsWith(prefixRef)) {
+ if (StringHelper.startsWith(term, prefixRef)) {
return AcceptStatus.YES;
} else {
return AcceptStatus.END;
Index: lucene/src/java/org/apache/lucene/search/FuzzyTermsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/FuzzyTermsEnum.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/search/FuzzyTermsEnum.java (working copy)
@@ -35,6 +35,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IntsRef;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.lucene.util.automaton.Automaton;
import org.apache.lucene.util.automaton.BasicAutomata;
@@ -428,7 +429,7 @@
*/
@Override
protected final AcceptStatus accept(BytesRef term) {
- if (term.startsWith(prefixBytesRef)) {
+ if (StringHelper.startsWith(term, prefixBytesRef)) {
UnicodeUtil.UTF8toUTF32(term, utf32);
final float similarity = similarity(utf32.ints, realPrefixLength, utf32.length - realPrefixLength);
if (similarity > minSimilarity) {
Index: lucene/src/java/org/apache/lucene/index/DocTermOrds.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/DocTermOrds.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/DocTermOrds.java (working copy)
@@ -20,6 +20,7 @@
import org.apache.lucene.util.PagedBytes;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.StringHelper;
import java.io.IOException;
import java.util.ArrayList;
@@ -278,7 +279,7 @@
// seek above):
for (;;) {
final BytesRef t = te.term();
- if (t == null || (termPrefix != null && !t.startsWith(termPrefix))) {
+ if (t == null || (termPrefix != null && !StringHelper.startsWith(t, termPrefix))) {
break;
}
//System.out.println("visit term=" + t.utf8ToString() + " " + t + " termNum=" + termNum);
@@ -785,7 +786,7 @@
private BytesRef setTerm() throws IOException {
term = termsEnum.term();
//System.out.println(" setTerm() term=" + term.utf8ToString() + " vs prefix=" + (prefix == null ? "null" : prefix.utf8ToString()));
- if (prefix != null && !term.startsWith(prefix)) {
+ if (prefix != null && !StringHelper.startsWith(term, prefix)) {
term = null;
}
return term;
Index: lucene/src/java/org/apache/lucene/index/AutomatonTermsEnum.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/AutomatonTermsEnum.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/AutomatonTermsEnum.java (working copy)
@@ -22,6 +22,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IntsRef;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.automaton.ByteRunAutomaton;
import org.apache.lucene.util.automaton.CompiledAutomaton;
import org.apache.lucene.util.automaton.Transition;
@@ -94,7 +95,7 @@
*/
@Override
protected AcceptStatus accept(final BytesRef term) {
- if (commonSuffixRef == null || term.endsWith(commonSuffixRef)) {
+ if (commonSuffixRef == null || StringHelper.endsWith(term, commonSuffixRef)) {
if (runAutomaton.run(term.bytes, term.offset, term.length))
return linear ? AcceptStatus.YES : AcceptStatus.YES_AND_SEEK;
else
Index: lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java (working copy)
@@ -125,8 +125,7 @@
@Override
public void startTerm(BytesRef term, int freq) throws IOException {
- final int prefix = StringHelper.bytesDifference(lastTerm.bytes, lastTerm.offset, lastTerm.length,
- term.bytes, term.offset, term.length);
+ final int prefix = StringHelper.bytesDifference(lastTerm, term);
final int suffix = term.length - prefix;
tvf.writeVInt(prefix);
tvf.writeVInt(suffix);
Index: lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextSegmentInfosReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextSegmentInfosReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextSegmentInfosReader.java (working copy)
@@ -32,6 +32,7 @@
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
import static org.apache.lucene.index.codecs.simpletext.SimpleTextSegmentInfosWriter.*;
@@ -48,35 +49,35 @@
final BytesRef scratch = new BytesRef();
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(VERSION);
+ assert StringHelper.startsWith(scratch, VERSION);
infos.version = Long.parseLong(readString(VERSION.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(COUNTER);
+ assert StringHelper.startsWith(scratch, COUNTER);
infos.counter = Integer.parseInt(readString(COUNTER.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(FNX_VERSION);
+ assert StringHelper.startsWith(scratch, FNX_VERSION);
infos.setGlobalFieldMapVersion(Long.parseLong(readString(FNX_VERSION.length, scratch)));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NUM_USERDATA);
+ assert StringHelper.startsWith(scratch, NUM_USERDATA);
int numUserData = Integer.parseInt(readString(NUM_USERDATA.length, scratch));
infos.userData = new HashMap<String,String>();
for (int i = 0; i < numUserData; i++) {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(USERDATA_KEY);
+ assert StringHelper.startsWith(scratch, USERDATA_KEY);
String key = readString(USERDATA_KEY.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(USERDATA_VALUE);
+ assert StringHelper.startsWith(scratch, USERDATA_VALUE);
String value = readString(USERDATA_VALUE.length, scratch);
infos.userData.put(key, value);
}
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NUM_SEGMENTS);
+ assert StringHelper.startsWith(scratch, NUM_SEGMENTS);
int numSegments = Integer.parseInt(readString(NUM_SEGMENTS.length, scratch));
for (int i = 0; i < numSegments; i++) {
@@ -86,55 +87,55 @@
public SegmentInfo readSegmentInfo(Directory directory, DataInput input, BytesRef scratch) throws IOException {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_NAME);
+ assert StringHelper.startsWith(scratch, SI_NAME);
final String name = readString(SI_NAME.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_CODEC);
+ assert StringHelper.startsWith(scratch, SI_CODEC);
final Codec codec = Codec.forName(readString(SI_CODEC.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_VERSION);
+ assert StringHelper.startsWith(scratch, SI_VERSION);
final String version = readString(SI_VERSION.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DOCCOUNT);
+ assert StringHelper.startsWith(scratch, SI_DOCCOUNT);
final int docCount = Integer.parseInt(readString(SI_DOCCOUNT.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DELCOUNT);
+ assert StringHelper.startsWith(scratch, SI_DELCOUNT);
final int delCount = Integer.parseInt(readString(SI_DELCOUNT.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_HASPROX);
+ assert StringHelper.startsWith(scratch, SI_HASPROX);
final int hasProx = readTernary(SI_HASPROX.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_HASVECTORS);
+ assert StringHelper.startsWith(scratch, SI_HASVECTORS);
final int hasVectors = readTernary(SI_HASVECTORS.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_USECOMPOUND);
+ assert StringHelper.startsWith(scratch, SI_USECOMPOUND);
final boolean isCompoundFile = Boolean.parseBoolean(readString(SI_USECOMPOUND.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DSOFFSET);
+ assert StringHelper.startsWith(scratch, SI_DSOFFSET);
final int dsOffset = Integer.parseInt(readString(SI_DSOFFSET.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DSSEGMENT);
+ assert StringHelper.startsWith(scratch, SI_DSSEGMENT);
final String dsSegment = readString(SI_DSSEGMENT.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DSCOMPOUND);
+ assert StringHelper.startsWith(scratch, SI_DSCOMPOUND);
final boolean dsCompoundFile = Boolean.parseBoolean(readString(SI_DSCOMPOUND.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DELGEN);
+ assert StringHelper.startsWith(scratch, SI_DELGEN);
final long delGen = Long.parseLong(readString(SI_DELGEN.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_NUM_NORMGEN);
+ assert StringHelper.startsWith(scratch, SI_NUM_NORMGEN);
final int numNormGen = Integer.parseInt(readString(SI_NUM_NORMGEN.length, scratch));
final Map<Integer,Long> normGen;
if (numNormGen == 0) {
@@ -143,28 +144,28 @@
normGen = new HashMap<Integer,Long>();
for (int i = 0; i < numNormGen; i++) {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_NORMGEN_KEY);
+ assert StringHelper.startsWith(scratch, SI_NORMGEN_KEY);
int key = Integer.parseInt(readString(SI_NORMGEN_KEY.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_NORMGEN_VALUE);
+ assert StringHelper.startsWith(scratch, SI_NORMGEN_VALUE);
long value = Long.parseLong(readString(SI_NORMGEN_VALUE.length, scratch));
normGen.put(key, value);
}
}
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_NUM_DIAG);
+ assert StringHelper.startsWith(scratch, SI_NUM_DIAG);
int numDiag = Integer.parseInt(readString(SI_NUM_DIAG.length, scratch));
Map<String,String> diagnostics = new HashMap<String,String>();
for (int i = 0; i < numDiag; i++) {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DIAG_KEY);
+ assert StringHelper.startsWith(scratch, SI_DIAG_KEY);
String key = readString(SI_DIAG_KEY.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(SI_DIAG_VALUE);
+ assert StringHelper.startsWith(scratch, SI_DIAG_VALUE);
String value = readString(SI_DIAG_VALUE.length, scratch);
diagnostics.put(key, value);
}
Index: lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldsReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldsReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldsReader.java (working copy)
@@ -32,6 +32,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.OpenBitSet;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.lucene.util.fst.Builder;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
@@ -80,7 +81,7 @@
current = null;
return null;
}
- if (scratch.startsWith(FIELD)) {
+ if (StringHelper.startsWith(scratch, FIELD)) {
return current = new String(scratch.bytes, scratch.offset + FIELD.length, scratch.length - FIELD.length, "UTF-8");
}
}
@@ -270,7 +271,7 @@
while(true) {
final long lineStart = in.getFilePointer();
SimpleTextUtil.readLine(in, scratch);
- if (scratch.startsWith(DOC)) {
+ if (StringHelper.startsWith(scratch, DOC)) {
if (!first && (liveDocs == null || liveDocs.get(docID))) {
in.seek(lineStart);
if (!omitTF) {
@@ -282,15 +283,15 @@
docID = ArrayUtil.parseInt(scratchUTF16.chars, 0, scratchUTF16.length);
termFreq = 0;
first = false;
- } else if (scratch.startsWith(FREQ)) {
+ } else if (StringHelper.startsWith(scratch, FREQ)) {
UnicodeUtil.UTF8toUTF16(scratch.bytes, scratch.offset+FREQ.length, scratch.length-FREQ.length, scratchUTF16);
termFreq = ArrayUtil.parseInt(scratchUTF16.chars, 0, scratchUTF16.length);
- } else if (scratch.startsWith(POS)) {
+ } else if (StringHelper.startsWith(scratch, POS)) {
// skip termFreq++;
- } else if (scratch.startsWith(PAYLOAD)) {
+ } else if (StringHelper.startsWith(scratch, PAYLOAD)) {
// skip
} else {
- assert scratch.startsWith(TERM) || scratch.startsWith(FIELD) || scratch.startsWith(END): "scratch=" + scratch.utf8ToString();
+ assert StringHelper.startsWith(scratch, TERM) || StringHelper.startsWith(scratch, FIELD) || StringHelper.startsWith(scratch, END): "scratch=" + scratch.utf8ToString();
if (!first && (liveDocs == null || liveDocs.get(docID))) {
in.seek(lineStart);
if (!omitTF) {
@@ -358,7 +359,7 @@
while(true) {
final long lineStart = in.getFilePointer();
SimpleTextUtil.readLine(in, scratch);
- if (scratch.startsWith(DOC)) {
+ if (StringHelper.startsWith(scratch, DOC)) {
if (!first && (liveDocs == null || liveDocs.get(docID))) {
nextDocStart = lineStart;
in.seek(posStart);
@@ -368,16 +369,16 @@
docID = ArrayUtil.parseInt(scratchUTF16.chars, 0, scratchUTF16.length);
tf = 0;
first = false;
- } else if (scratch.startsWith(FREQ)) {
+ } else if (StringHelper.startsWith(scratch, FREQ)) {
UnicodeUtil.UTF8toUTF16(scratch.bytes, scratch.offset+FREQ.length, scratch.length-FREQ.length, scratchUTF16);
tf = ArrayUtil.parseInt(scratchUTF16.chars, 0, scratchUTF16.length);
posStart = in.getFilePointer();
- } else if (scratch.startsWith(POS)) {
+ } else if (StringHelper.startsWith(scratch, POS)) {
// skip
- } else if (scratch.startsWith(PAYLOAD)) {
+ } else if (StringHelper.startsWith(scratch, PAYLOAD)) {
// skip
} else {
- assert scratch.startsWith(TERM) || scratch.startsWith(FIELD) || scratch.startsWith(END);
+ assert StringHelper.startsWith(scratch, TERM) || StringHelper.startsWith(scratch, FIELD) || StringHelper.startsWith(scratch, END);
if (!first && (liveDocs == null || liveDocs.get(docID))) {
nextDocStart = lineStart;
in.seek(posStart);
@@ -398,12 +399,12 @@
@Override
public int nextPosition() throws IOException {
SimpleTextUtil.readLine(in, scratch);
- assert scratch.startsWith(POS): "got line=" + scratch.utf8ToString();
+ assert StringHelper.startsWith(scratch, POS): "got line=" + scratch.utf8ToString();
UnicodeUtil.UTF8toUTF16(scratch.bytes, scratch.offset+POS.length, scratch.length-POS.length, scratchUTF16_2);
final int pos = ArrayUtil.parseInt(scratchUTF16_2.chars, 0, scratchUTF16_2.length);
final long fp = in.getFilePointer();
SimpleTextUtil.readLine(in, scratch);
- if (scratch.startsWith(PAYLOAD)) {
+ if (StringHelper.startsWith(scratch, PAYLOAD)) {
final int len = scratch.length - PAYLOAD.length;
if (scratch2.bytes.length < len) {
scratch2.grow(len);
@@ -477,7 +478,7 @@
OpenBitSet visitedDocs = new OpenBitSet();
while(true) {
SimpleTextUtil.readLine(in, scratch);
- if (scratch.equals(END) || scratch.startsWith(FIELD)) {
+ if (scratch.equals(END) || StringHelper.startsWith(scratch, FIELD)) {
if (lastDocsStart != -1) {
b.add(lastTerm, new PairOutputs.Pair<Long,PairOutputs.Pair<Long,Long>>(lastDocsStart,
new PairOutputs.Pair<Long,Long>((long) docFreq,
@@ -485,15 +486,15 @@
sumTotalTermFreq += totalTermFreq;
}
break;
- } else if (scratch.startsWith(DOC)) {
+ } else if (StringHelper.startsWith(scratch, DOC)) {
docFreq++;
sumDocFreq++;
UnicodeUtil.UTF8toUTF16(scratch.bytes, scratch.offset+DOC.length, scratch.length-DOC.length, scratchUTF16);
int docID = ArrayUtil.parseInt(scratchUTF16.chars, 0, scratchUTF16.length);
visitedDocs.set(docID);
- } else if (scratch.startsWith(POS)) {
+ } else if (StringHelper.startsWith(scratch, POS)) {
totalTermFreq++;
- } else if (scratch.startsWith(TERM)) {
+ } else if (StringHelper.startsWith(scratch, TERM)) {
if (lastDocsStart != -1) {
b.add(lastTerm, new PairOutputs.Pair<Long,PairOutputs.Pair<Long,Long>>(lastDocsStart,
new PairOutputs.Pair<Long,Long>((long) docFreq,
Index: lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java (working copy)
@@ -46,6 +46,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import static org.apache.lucene.index.codecs.simpletext.SimpleTextTermVectorsWriter.*;
@@ -88,7 +89,7 @@
offsets = new ArrayList<Long>();
while (!scratch.equals(END)) {
readLine();
- if (scratch.startsWith(DOC)) {
+ if (StringHelper.startsWith(scratch, DOC)) {
offsets.add(in.getFilePointer());
}
}
@@ -105,30 +106,30 @@
SortedMap<String,SimpleTVTerms> fields = new TreeMap<String,SimpleTVTerms>();
in.seek(offsets.get(doc));
readLine();
- assert scratch.startsWith(NUMFIELDS);
+ assert StringHelper.startsWith(scratch, NUMFIELDS);
int numFields = parseIntAt(NUMFIELDS.length);
if (numFields == 0) {
return null; // no vectors for this doc
}
for (int i = 0; i < numFields; i++) {
readLine();
- assert scratch.startsWith(FIELD);
+ assert StringHelper.startsWith(scratch, FIELD);
int fieldNumber = parseIntAt(FIELD.length);
readLine();
- assert scratch.startsWith(FIELDNAME);
+ assert StringHelper.startsWith(scratch, FIELDNAME);
String fieldName = readString(FIELDNAME.length, scratch);
readLine();
- assert scratch.startsWith(FIELDPOSITIONS);
+ assert StringHelper.startsWith(scratch, FIELDPOSITIONS);
boolean positions = Boolean.parseBoolean(readString(FIELDPOSITIONS.length, scratch));
readLine();
- assert scratch.startsWith(FIELDOFFSETS);
+ assert StringHelper.startsWith(scratch, FIELDOFFSETS);
boolean offsets = Boolean.parseBoolean(readString(FIELDOFFSETS.length, scratch));
readLine();
- assert scratch.startsWith(FIELDTERMCOUNT);
+ assert StringHelper.startsWith(scratch, FIELDTERMCOUNT);
int termCount = parseIntAt(FIELDTERMCOUNT.length);
SimpleTVTerms terms = new SimpleTVTerms();
@@ -136,7 +137,7 @@
for (int j = 0; j < termCount; j++) {
readLine();
- assert scratch.startsWith(TERMTEXT);
+ assert StringHelper.startsWith(scratch, TERMTEXT);
BytesRef term = new BytesRef();
int termLength = scratch.length - TERMTEXT.length;
term.grow(termLength);
@@ -147,7 +148,7 @@
terms.terms.put(term, postings);
readLine();
- assert scratch.startsWith(TERMFREQ);
+ assert StringHelper.startsWith(scratch, TERMFREQ);
postings.freq = parseIntAt(TERMFREQ.length);
if (positions || offsets) {
@@ -163,17 +164,17 @@
for (int k = 0; k < postings.freq; k++) {
if (positions) {
readLine();
- assert scratch.startsWith(POSITION);
+ assert StringHelper.startsWith(scratch, POSITION);
postings.positions[k] = parseIntAt(POSITION.length);
}
if (offsets) {
readLine();
- assert scratch.startsWith(STARTOFFSET);
+ assert StringHelper.startsWith(scratch, STARTOFFSET);
postings.startOffsets[k] = parseIntAt(STARTOFFSET.length);
readLine();
- assert scratch.startsWith(ENDOFFSET);
+ assert StringHelper.startsWith(scratch, ENDOFFSET);
postings.endOffsets[k] = parseIntAt(ENDOFFSET.length);
}
}
Index: lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldInfosReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldInfosReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextFieldInfosReader.java (working copy)
@@ -33,6 +33,7 @@
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
import static org.apache.lucene.index.codecs.simpletext.SimpleTextFieldInfosWriter.*;
@@ -57,45 +58,45 @@
try {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NUMFIELDS);
+ assert StringHelper.startsWith(scratch, NUMFIELDS);
final int size = Integer.parseInt(readString(NUMFIELDS.length, scratch));
FieldInfo infos[] = new FieldInfo[size];
for (int i = 0; i < size; i++) {
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NAME);
+ assert StringHelper.startsWith(scratch, NAME);
String name = readString(NAME.length, scratch);
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NUMBER);
+ assert StringHelper.startsWith(scratch, NUMBER);
int fieldNumber = Integer.parseInt(readString(NUMBER.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(ISINDEXED);
+ assert StringHelper.startsWith(scratch, ISINDEXED);
boolean isIndexed = Boolean.parseBoolean(readString(ISINDEXED.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(STORETV);
+ assert StringHelper.startsWith(scratch, STORETV);
boolean storeTermVector = Boolean.parseBoolean(readString(STORETV.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(STORETVPOS);
+ assert StringHelper.startsWith(scratch, STORETVPOS);
boolean storePositionsWithTermVector = Boolean.parseBoolean(readString(STORETVPOS.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(STORETVOFF);
+ assert StringHelper.startsWith(scratch, STORETVOFF);
boolean storeOffsetWithTermVector = Boolean.parseBoolean(readString(STORETVOFF.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(PAYLOADS);
+ assert StringHelper.startsWith(scratch, PAYLOADS);
boolean storePayloads = Boolean.parseBoolean(readString(PAYLOADS.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(NORMS);
+ assert StringHelper.startsWith(scratch, NORMS);
boolean omitNorms = !Boolean.parseBoolean(readString(NORMS.length, scratch));
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(DOCVALUES);
+ assert StringHelper.startsWith(scratch, DOCVALUES);
String dvType = readString(DOCVALUES.length, scratch);
final ValueType docValuesType;
@@ -106,7 +107,7 @@
}
SimpleTextUtil.readLine(input, scratch);
- assert scratch.startsWith(INDEXOPTIONS);
+ assert StringHelper.startsWith(scratch, INDEXOPTIONS);
IndexOptions indexOptions = IndexOptions.valueOf(readString(INDEXOPTIONS.length, scratch));
hasVectors |= storeTermVector;
Index: lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextStoredFieldsReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextStoredFieldsReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextStoredFieldsReader.java (working copy)
@@ -36,6 +36,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import static org.apache.lucene.index.codecs.simpletext.SimpleTextStoredFieldsWriter.*;
@@ -81,7 +82,7 @@
offsets = new ArrayList<Long>();
while (!scratch.equals(END)) {
readLine();
- if (scratch.startsWith(DOC)) {
+ if (StringHelper.startsWith(scratch, DOC)) {
offsets.add(in.getFilePointer());
}
}
@@ -91,18 +92,18 @@
public void visitDocument(int n, StoredFieldVisitor visitor) throws CorruptIndexException, IOException {
in.seek(offsets.get(n));
readLine();
- assert scratch.startsWith(NUM);
+ assert StringHelper.startsWith(scratch, NUM);
int numFields = parseIntAt(NUM.length);
for (int i = 0; i < numFields; i++) {
readLine();
- assert scratch.startsWith(FIELD);
+ assert StringHelper.startsWith(scratch, FIELD);
int fieldNumber = parseIntAt(FIELD.length);
FieldInfo fieldInfo = fieldInfos.fieldInfo(fieldNumber);
readLine();
- assert scratch.startsWith(NAME);
+ assert StringHelper.startsWith(scratch, NAME);
readLine();
- assert scratch.startsWith(TYPE);
+ assert StringHelper.startsWith(scratch, TYPE);
final BytesRef type;
if (equalsAt(TYPE_STRING, scratch, TYPE.length)) {
@@ -127,7 +128,7 @@
break;
case NO:
readLine();
- assert scratch.startsWith(VALUE);
+ assert StringHelper.startsWith(scratch, VALUE);
break;
case STOP: return;
}
@@ -136,7 +137,7 @@
private void readField(BytesRef type, FieldInfo fieldInfo, StoredFieldVisitor visitor) throws IOException {
readLine();
- assert scratch.startsWith(VALUE);
+ assert StringHelper.startsWith(scratch, VALUE);
if (type == TYPE_STRING) {
visitor.stringField(fieldInfo, new String(scratch.bytes, scratch.offset+VALUE.length, scratch.length-VALUE.length, "UTF-8"));
} else if (type == TYPE_BINARY) {
Index: lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java (working copy)
@@ -47,6 +47,7 @@
import org.apache.lucene.util.CodecUtil;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.RamUsageEstimator;
+import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.automaton.CompiledAutomaton;
import org.apache.lucene.util.automaton.RunAutomaton;
import org.apache.lucene.util.automaton.Transition;
@@ -929,7 +930,7 @@
}
System.arraycopy(currentFrame.suffixBytes, currentFrame.startBytePos, term.bytes, currentFrame.prefix, currentFrame.suffix);
- if (isSubBlock && target.startsWith(term)) {
+ if (isSubBlock && StringHelper.startsWith(target, term)) {
// Recurse
//if (DEBUG) System.out.println(" recurse!");
currentFrame = pushFrame(getState());
Index: lucene/src/java/org/apache/lucene/util/StringHelper.java
===================================================================
--- lucene/src/java/org/apache/lucene/util/StringHelper.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/util/StringHelper.java (working copy)
@@ -29,36 +29,24 @@
public abstract class StringHelper {
/**
- * Compares two byte[] arrays, element by element, and returns the
+ * Compares two {@link BytesRef}, element by element, and returns the
* number of elements common to both arrays.
*
- * @param bytes1 The first byte[] to compare
- * @param bytes2 The second byte[] to compare
+ * @param left The first {@link BytesRef} to compare
+ * @param right The second {@link BytesRef} to compare
* @return The number of common elements.
*/
- public static int bytesDifference(byte[] bytes1, int len1, byte[] bytes2, int len2) {
- int len = len1 < len2 ? len1 : len2;
+ public static int bytesDifference(BytesRef left, BytesRef right) {
+ int len = left.length < right.length ? left.length : right.length;
+ final byte[] bytesLeft = left.bytes;
+ final int offLeft = left.offset;
+ byte[] bytesRight = right.bytes;
+ final int offRight = right.offset;
for (int i = 0; i < len; i++)
- if (bytes1[i] != bytes2[i])
+ if (bytesLeft[i+offLeft] != bytesRight[i+offRight])
return i;
return len;
}
-
- /**
- * Compares two byte[] arrays, element by element, and returns the
- * number of elements common to both arrays.
- *
- * @param bytes1 The first byte[] to compare
- * @param bytes2 The second byte[] to compare
- * @return The number of common elements.
- */
- public static int bytesDifference(byte[] bytes1, int off1, int len1, byte[] bytes2, int off2, int len2) {
- int len = len1 < len2 ? len1 : len2;
- for (int i = 0; i < len; i++)
- if (bytes1[i+off1] != bytes2[i+off2])
- return i;
- return len;
- }
private StringHelper() {
}
@@ -108,4 +96,51 @@
return s1.equals(s2);
}
}
+
+ /**
+ * Returns <code>true</code> iff the ref starts with the given prefix.
+ * Otherwise <code>false</code>.
+ *
+ * @param ref
+ * the {@link BytesRef} to test
+ * @param prefix
+ * the expected prefix
+ * @return Returns <code>true</code> iff the ref starts with the given prefix.
+ * Otherwise <code>false</code>.
+ */
+ public static boolean startsWith(BytesRef ref, BytesRef prefix) {
+ return sliceEquals(ref, prefix, 0);
+ }
+
+ /**
+ * Returns <code>true</code> iff the ref ends with the given suffix. Otherwise
+ * <code>false</code>.
+ *
+ * @param ref
+ * the {@link BytesRef} to test
+ * @param suffix
+ * the expected suffix
+ * @return Returns <code>true</code> iff the ref ends with the given suffix.
+ * Otherwise <code>false</code>.
+ */
+ public static boolean endsWith(BytesRef ref, BytesRef suffix) {
+ return sliceEquals(ref, suffix, ref.length - suffix.length);
+ }
+
+ private static boolean sliceEquals(BytesRef sliceToTest, BytesRef other, int pos) {
+ if (pos < 0 || sliceToTest.length - pos < other.length) {
+ return false;
+ }
+ int i = sliceToTest.offset + pos;
+ int j = other.offset;
+ final int k = other.offset + other.length;
+
+ while (j < k) {
+ if (sliceToTest.bytes[i++] != other.bytes[j++]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
}
Index: lucene/src/java/org/apache/lucene/util/BytesRef.java
===================================================================
--- lucene/src/java/org/apache/lucene/util/BytesRef.java (revision 1206547)
+++ lucene/src/java/org/apache/lucene/util/BytesRef.java (working copy)
@@ -104,31 +104,7 @@
return new BytesRef(bytes, offset, length);
}
- private boolean sliceEquals(BytesRef other, int pos) {
- if (pos < 0 || length - pos < other.length) {
- return false;
- }
- int i = offset + pos;
- int j = other.offset;
- final int k = other.offset + other.length;
-
- while (j < k) {
- if (bytes[i++] != other.bytes[j++]) {
- return false;
- }
- }
-
- return true;
- }
- public boolean startsWith(BytesRef other) {
- return sliceEquals(other, 0);
- }
-
- public boolean endsWith(BytesRef other) {
- return sliceEquals(other, length - other.length);
- }
-
/** Calculates the hash code as required by TermsHash during indexing.
* <p>It is defined as:
* <pre>