Skip to content

Commit

Permalink
simplify and fix signedness issues in contains methods (RoaringBitmap…
Browse files Browse the repository at this point in the history
  • Loading branch information
richardstartin authored and lemire committed Jun 13, 2018
1 parent e80aab4 commit c8fc9dc
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 39 deletions.
14 changes: 4 additions & 10 deletions roaringbitmap/src/main/java/org/roaringbitmap/ArrayContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -295,17 +295,11 @@ protected boolean contains(RunContainer runContainer) {
if (runContainer.getCardinality() > cardinality) {
return false;
}
int startPos, stopPos = -1;

for (int i = 0; i < runContainer.numberOfRuns(); ++i) {
short start = runContainer.getValue(i);
int stop = Util.toIntUnsigned(start) + Util.toIntUnsigned(runContainer.getLength(i));
startPos = Util.advanceUntil(content, stopPos, cardinality, start);
stopPos = Util.advanceUntil(content, stopPos, cardinality, (short)stop);
if(startPos == cardinality) {
return false;
} else if(stopPos - startPos != stop - start
|| content[startPos] != start
|| content[stopPos] != stop) {
int start = Util.toIntUnsigned(runContainer.getValue(i));
int length = Util.toIntUnsigned(runContainer.getLength(i));
if (!contains(start, start + length)) {
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,12 +373,10 @@ protected boolean contains(RunContainer runContainer) {
}
}
for (int i = 0; i < runContainer.numberOfRuns(); ++i) {
short runStart = runContainer.getValue(i);
int le = Util.toIntUnsigned(runContainer.getLength(i));
for (short j = runStart; j <= runStart + le; ++j) {
if (!contains(j)) {
return false;
}
int start = Util.toIntUnsigned(runContainer.getValue(i));
int length = Util.toIntUnsigned(runContainer.getLength(i));
if (!contains(start, start + length)) {
return false;
}
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,7 @@ protected boolean contains(BitmapContainer bitmapContainer) {
while(ib < bitmapContainer.bitmap.length && ir < runCount) {
long w = bitmapContainer.bitmap[ib];
while (w != 0 && ir < runCount) {
short start = getValue(ir);
int start = Util.toIntUnsigned(getValue(ir));
int stop = start+ toIntUnsigned(getLength(ir));
long t = w & -w;
long r = ib * 64 + Long.numberOfTrailingZeros(w);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1627,17 +1627,11 @@ protected boolean contains(MappeableRunContainer runContainer) {
if (runContainer.getCardinality() > cardinality) {
return false;
}
int startPos, stopPos = -1;

for (int i = 0; i < runContainer.numberOfRuns(); ++i) {
short start = runContainer.getValue(i);
int stop = toIntUnsigned(start) + toIntUnsigned(runContainer.getLength(i));
startPos = BufferUtil.advanceUntil(content, stopPos, cardinality, start);
stopPos = BufferUtil.advanceUntil(content, stopPos, cardinality, (short)stop);
if(startPos == cardinality) {
return false;
} else if(stopPos - startPos != stop - start
|| content.get(startPos) != start
|| content.get(stopPos) != stop) {
int start = toIntUnsigned(runContainer.getValue(i));
int length = toIntUnsigned(runContainer.getLength(i));
if (!contains(start, start + length)) {
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2018,12 +2018,10 @@ protected boolean contains(MappeableRunContainer runContainer) {
}
}
for (int i = 0; i < runContainer.numberOfRuns(); ++i) {
short runStart = runContainer.getValue(i);
int le = BufferUtil.toIntUnsigned(runContainer.getLength(i));
for (short j = runStart; j <= runStart + le; ++j) {
if (!contains(j)) {
return false;
}
int start = BufferUtil.toIntUnsigned(runContainer.getValue(i));
int length = BufferUtil.toIntUnsigned(runContainer.getLength(i));
if (!contains(start, start + length)) {
return false;
}
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2619,18 +2619,19 @@ protected boolean contains(MappeableArrayContainer arrayContainer) {
return false;
}
int ia = 0, ir = 0;
while(ia < arrayContainer.getCardinality() && ir <= runCount) {
int start = getValue(ir);
while(ia < arrayContainer.getCardinality() && ir < runCount) {
int start = toIntUnsigned(getValue(ir));
int stop = start + toIntUnsigned(getLength(ir));
if(arrayContainer.content.get(ia) < start) {
int value = toIntUnsigned(arrayContainer.content.get(ia));
if(value < start) {
return false;
} else if (arrayContainer.content.get(ia) > stop) {
} else if (value > stop) {
++ir;
} else {
++ia;
}
}
return ia <= cardinality && ir <= runCount;
return ia == arrayContainer.getCardinality();
}

@Override
Expand All @@ -2644,7 +2645,7 @@ protected boolean contains(MappeableBitmapContainer bitmapContainer) {
while(ib < MappeableBitmapContainer.MAX_CAPACITY / 64 && ir < runCount) {
long w = bitmapContainer.bitmap.get(ib);
while (w != 0 && ir < runCount) {
short start = getValue(ir);
int start = toIntUnsigned(getValue(ir));
int stop = start+ toIntUnsigned(getLength(ir));
long t = w & -w;
long r = ib * 64 + Long.numberOfTrailingZeros(w);
Expand Down

0 comments on commit c8fc9dc

Please sign in to comment.