Skip to content

Commit

Permalink
Added countNoReturnWithFilter() and indexOfWithOffset().
Browse files Browse the repository at this point in the history
  • Loading branch information
Baoqiu Cui committed Mar 29, 2011
1 parent 8f741b5 commit 09cb04c
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 5 deletions.
45 changes: 45 additions & 0 deletions bobo-browse/src/com/browseengine/bobo/facets/data/TermIntList.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,51 @@ public int indexOf(int val)
return Arrays.binarySearch(_elements, val);
}

@Override
public int indexOfWithOffset(Object value, int offset)
{
if (withDummy)
{
if (value == null || offset >= _elements.length)
return -1;
int val = parse(String.valueOf(value));
return Arrays.binarySearch(_elements, offset, _elements.length, val);
}
else
{
int val = parse(String.valueOf(value));
return Arrays.binarySearch(_elements, offset, _elements.length, val);
}
}

public int indexOfWithOffset(Integer value, int offset)
{
if (withDummy)
{
if (value==null || offset >= _elements.length)
return -1;
return Arrays.binarySearch(_elements, offset, _elements.length, value.intValue());
}
else
{
return Arrays.binarySearch(_elements, offset, _elements.length, value.intValue());
}
}

public int indexOfWithOffset(int value, int offset)
{
if (withDummy)
{
if (offset >= _elements.length)
return -1;
return Arrays.binarySearch(_elements, offset, _elements.length, value);
}
else
{
return Arrays.binarySearch(_elements, offset, _elements.length, value);
}
}

@Override
public int indexOfWithType(Integer val)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@ public T getRawValue(int index){

abstract public int indexOf(Object o);

public int indexOfWithOffset(Object value, int offset)
{
throw new IllegalStateException("not supported");
}

public abstract int indexOfWithType(T o);

public boolean isEmpty() {
Expand Down
41 changes: 36 additions & 5 deletions bobo-browse/src/com/browseengine/bobo/util/BigNestedIntArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -712,11 +712,6 @@ else if(val != MISSING)
return 0;
}


public final void countNoReturnWithFilter(final int id, final int[] count,BitVector filter){

}

public final void countNoReturn(final int id, final int[] count)
{
final int[] page = _list[id >> PAGEID_SHIFT];
Expand Down Expand Up @@ -746,6 +741,42 @@ else if(val != MISSING)
return;
}

public final void countNoReturnWithFilter(final int id, final int[] count, BitVector filter)
{
final int[] page = _list[id >> PAGEID_SHIFT];
if(page == null) {
count[0]++;
return;
}

int val = page[id & SLOTID_MASK];
if(val >= 0)
{
if (filter.get(val))
{
count[val]++;
}
return;
}
else if(val != MISSING)
{
int idx = - (val >> VALIDX_SHIFT); // signed shift, remember val is a negative number
int cnt = (val & COUNT_MASK);
int end = idx + cnt;
while(idx < end)
{
int value = page[idx++];
if (filter.get(value))
{
count[value]++;
}
}
return;
}
count[0]++;
return;
}

/**
* returns the number data items for id
* @param id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.browseengine.bobo.util.BigNestedIntArray;
import com.browseengine.bobo.util.BigNestedIntArray.BufferedLoader;
import com.browseengine.bobo.util.BigNestedIntArray.Loader;
import org.apache.lucene.util.BitVector;

import java.util.Random;
import java.util.Arrays;
Expand Down Expand Up @@ -300,4 +301,50 @@ public void testMaxItems() throws Throwable
}
}
}

public void testCountNoReturnWithFilter() throws Throwable
{
int maxId = 20;
int numVals = 10;
int[] count = new int[numVals];

BufferedLoader loader = new BufferedLoader(maxId);
for (int val = 0; val < numVals; val++)
{
for (int i = 0; i < maxId - val; i++)
{
loader.add(i, val);
}
}

BigNestedIntArray nestedArray = new BigNestedIntArray();
nestedArray.load(maxId, loader);

BitVector filter = new BitVector(numVals);
for (int i = 0; i < numVals; i++)
{
if (i % 2 == 0)
{
filter.set(i);
}
}

for (int i = 0; i < maxId; i++)
{
nestedArray.countNoReturnWithFilter(i, count, filter);
}

for (int i = 0; i < numVals; i++)
{
if (i % 2 == 0)
{
assertTrue(count[i] == maxId - i);
}
else
{
assertTrue(count[i] == 0);
}
}
return;
}
}

0 comments on commit 09cb04c

Please sign in to comment.