org.apache.lucene.facet.search
Class IntArrayAllocator

java.lang.Object
  extended by org.apache.lucene.facet.search.TemporaryObjectAllocator<int[]>
      extended by org.apache.lucene.facet.search.IntArrayAllocator

public final class IntArrayAllocator
extends TemporaryObjectAllocator<int[]>

An IntArrayAllocator is an object which manages counter array objects of a certain length. These counter arrays are needed temporarily during faceted search (see FacetsAccumulator and can be reused across searches instead of being allocated afresh on every search.

An IntArrayAllocator is thread-safe.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Constructor Summary
IntArrayAllocator(int length, int maxArrays)
          Construct an allocator for counter arrays of length length, keeping around a pool of up to maxArrays old arrays.
 
Method Summary
 void clear(int[] array)
          Subclasses must override this method to clear an existing object of the desired type, to prepare it for reuse.
 int[] create()
          Subclasses must override this method to actually create a new object of the desired type.
 
Methods inherited from class org.apache.lucene.facet.search.TemporaryObjectAllocator
allocate, free
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

IntArrayAllocator

public IntArrayAllocator(int length,
                         int maxArrays)
Construct an allocator for counter arrays of length length, keeping around a pool of up to maxArrays old arrays.

Note that the pool size only restricts the number of arrays that hang around when not needed, but not the maximum number of arrays that are allocated when actually is use: If a number of concurrent threads ask for an allocation, all of them will get a counter array, even if their number is greater than maxArrays. If an application wants to limit the number of concurrent threads making allocations, it needs to do so on its own - for example by blocking new threads until the existing ones have finished.

In particular, when maxArrays=0, this object behaves as a trivial allocator, always allocating a new array and never reusing an old one.

Method Detail

create

public int[] create()
Description copied from class: TemporaryObjectAllocator
Subclasses must override this method to actually create a new object of the desired type.

Specified by:
create in class TemporaryObjectAllocator<int[]>

clear

public void clear(int[] array)
Description copied from class: TemporaryObjectAllocator
Subclasses must override this method to clear an existing object of the desired type, to prepare it for reuse. Note that objects will be cleared just before reuse (on allocation), not when freed.

Specified by:
clear in class TemporaryObjectAllocator<int[]>