Class | AMQP::IntAllocator
In: | lib/amqp/int_allocator.rb
Parent: | Object

Simple bitset-based integer allocator, heavily inspired by com.rabbitmq.utility.IntAllocator class in the RabbitMQ Java client.

Unlike monotonically incrementing identifier, this allocator is suitable for very long running programs that aggressively allocate and release channels.

### Methods

allocate allocated? find_unallocated_position free new release reset

### Attributes

hi | [R] | @return [Integer] Upper boundary of the integer range available for allocation
lo | [R] | @return [Integer] Lower boundary of the integer range available for allocation
number_of_bits | [R] | @return [Integer] Number of integers in the allocation range

### Public Class methods

new(lo, hi)

@param [Integer] lo Lower boundary of the integer range available for allocation @param [Integer] hi Upper boundary of the integer range available for allocation @raise [ArgumentError] if upper boundary is not greater than the lower one

### Public Instance methods

allocate()

Attempts to allocate next available integer. If allocation succeeds, allocated value is returned. Otherwise, nil is returned.

Current implementation of this method is O(n), where n is number of bits in the range available for allocation.

@return [Integer] Allocated integer if allocation succeeded. nil otherwise.

allocated?(reservation)

@return [Boolean] true if provided argument was previously allocated, false otherwise

free(reservation)

Releases previously allocated integer. If integer provided as argument was not previously allocated, this method has no effect.

@return [NilClass] nil

release(reservation)

Alias for free

reset()

Releases the whole allocation range

### Protected Instance methods

find_unallocated_position()

This implementation is significantly less efficient that what the RabbitMQ Java client has (based on java.lang.Long#nextSetBit and java.lang.Long.numberOfTrailingZeros, and thus binary search over bits). But for channel id generation, this is a good enough implementation.

@private

[Validate]