public class IntAllocator extends Object
A class for allocating integers from a given range that uses a
BitSet
representation of the free integers.
This was originally an ordered chain of non-overlapping Intervals, together with a fixed size array cache for freed integers.
reserve(int)
was expensive in this scheme, whereas in the
present implementation it is O(1), as is free(int)
.
Although allocate()
is slightly slower than O(1) and in the
worst case could be O(N), the use of a "lastIndex
" field
for starting the next scan for free integers means this is negligible.
The data representation overhead is O(N) where N is the size of the
allocation range. One long
is used for every 64 integers in the
range.
Very little Object creation and destruction occurs in use.
Constructor and Description |
---|
IntAllocator(int bottom,
int top)
Creates an IntAllocator allocating integer IDs within the
inclusive range [
bottom , top ]. |
Modifier and Type | Method and Description |
---|---|
int |
allocate()
Allocate an unallocated integer from the range, or return -1 if no
more integers are available.
|
void |
free(int reservation)
Make the provided integer available for allocation again.
|
boolean |
reserve(int reservation)
Attempt to reserve the provided ID as if it had been allocated.
|
String |
toString() |
public IntAllocator(int bottom, int top)
bottom
, top
].bottom
- lower end of rangetop
- upper end of range (inclusive)public int allocate()
public void free(int reservation)
reservation
- the previously allocated integer to freepublic boolean reserve(int reservation)
reservation
- the integer to be allocated, if possibletrue
if allocated, false
if already allocatedCopyright © 2022 VMware, Inc. or its affiliates.. All rights reserved.