update primitiveCollections to 0.1.20171216143737
Use intersection and union methods from IntList.
This commit is contained in:
@@ -6,19 +6,11 @@ dependencies {
|
|||||||
compile project(':pdb-utils')
|
compile project(':pdb-utils')
|
||||||
antlr "org.antlr:antlr4:4.7"
|
antlr "org.antlr:antlr4:4.7"
|
||||||
|
|
||||||
compile 'org.lucares:primitiveCollections:0.1.20171007100354'
|
compile 'org.lucares:primitiveCollections:0.1.20171216143737'
|
||||||
compile 'org.apache.commons:commons-lang3:3.6'
|
compile 'org.apache.commons:commons-lang3:3.6'
|
||||||
|
|
||||||
compile 'org.apache.logging.log4j:log4j-core:2.9.1'
|
compile 'org.apache.logging.log4j:log4j-core:2.9.1'
|
||||||
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1'
|
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
generated{
|
|
||||||
java.srcDir "build/generated-src/antlr/main"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava{
|
|
||||||
source += sourceSets.generated.java
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -69,26 +69,8 @@ public class ExpressionToDocIdVisitor extends ExpressionVisitor<IntList> {
|
|||||||
final IntList leftFiles = left.visit(this);
|
final IntList leftFiles = left.visit(this);
|
||||||
final IntList rightFiles = right.visit(this);
|
final IntList rightFiles = right.visit(this);
|
||||||
|
|
||||||
final IntList result = new IntList(Math.min(leftFiles.size(), rightFiles.size()));
|
final IntList result = IntList.intersection(leftFiles,rightFiles);
|
||||||
|
assert result.isSorted();
|
||||||
int l = 0;
|
|
||||||
int r = 0;
|
|
||||||
|
|
||||||
while (l < leftFiles.size() && r < rightFiles.size()) {
|
|
||||||
|
|
||||||
final int lv = leftFiles.get(l);
|
|
||||||
final int rv = rightFiles.get(r);
|
|
||||||
|
|
||||||
if (lv < rv) {
|
|
||||||
l++;
|
|
||||||
} else if (lv > rv) {
|
|
||||||
r++;
|
|
||||||
} else {
|
|
||||||
result.add(lv);
|
|
||||||
l++;
|
|
||||||
r++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -101,7 +83,8 @@ public class ExpressionToDocIdVisitor extends ExpressionVisitor<IntList> {
|
|||||||
final IntList leftFiles = left.visit(this);
|
final IntList leftFiles = left.visit(this);
|
||||||
final IntList rightFiles = right.visit(this);
|
final IntList rightFiles = right.visit(this);
|
||||||
|
|
||||||
final IntList result = merge(leftFiles, rightFiles);
|
final IntList result = IntList.union(leftFiles, rightFiles);
|
||||||
|
assert result.isSorted();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -202,7 +185,7 @@ public class ExpressionToDocIdVisitor extends ExpressionVisitor<IntList> {
|
|||||||
IntList result = new IntList();
|
IntList result = new IntList();
|
||||||
|
|
||||||
for (final IntList intList : lists) {
|
for (final IntList intList : lists) {
|
||||||
result = merge(result, intList);
|
result = IntList.union(result, intList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -211,38 +194,4 @@ public class ExpressionToDocIdVisitor extends ExpressionVisitor<IntList> {
|
|||||||
private boolean isMatchAll(final String stringValue) {
|
private boolean isMatchAll(final String stringValue) {
|
||||||
return Objects.equals("*", stringValue);
|
return Objects.equals("*", stringValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IntList merge(final IntList leftFiles, final IntList rightFiles) {
|
|
||||||
final IntList result = new IntList(leftFiles.size() + rightFiles.size());
|
|
||||||
|
|
||||||
int l = 0;
|
|
||||||
int r = 0;
|
|
||||||
|
|
||||||
while (l < leftFiles.size() && r < rightFiles.size()) {
|
|
||||||
|
|
||||||
final int lv = leftFiles.get(l);
|
|
||||||
final int rv = rightFiles.get(r);
|
|
||||||
|
|
||||||
if (lv < rv) {
|
|
||||||
result.add(lv);
|
|
||||||
l++;
|
|
||||||
} else if (lv > rv) {
|
|
||||||
result.add(rv);
|
|
||||||
r++;
|
|
||||||
} else {
|
|
||||||
result.add(lv);
|
|
||||||
l++;
|
|
||||||
r++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (l < leftFiles.size()) {
|
|
||||||
final int length = leftFiles.size() - l;
|
|
||||||
result.addAll(leftFiles.get(l, length));
|
|
||||||
} else if (r < rightFiles.size()) {
|
|
||||||
final int length = rightFiles.size() - r;
|
|
||||||
result.addAll(rightFiles.get(r, length));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user