com.koloboke.collect.hash
Interface ByteHashFactory<F extends ByteHashFactory<F>>

Type Parameters:
F - the concrete factory type which extends this interface
All Superinterfaces:
ContainerFactory<F>, HashContainerFactory<F>
All Known Subinterfaces:
HashByteByteMapFactory, HashByteCharMapFactory, HashByteDoubleMapFactory, HashByteFloatMapFactory, HashByteIntMapFactory, HashByteLongMapFactory, HashByteObjMapFactory<V>, HashByteSetFactory, HashByteShortMapFactory

public interface ByteHashFactory<F extends ByteHashFactory<F>>
extends HashContainerFactory<F>

Common configuration for factories of hash containers with byte keys.

Currently ByteHashFactory allows to specify consecutive range of keys which could be inserted into hash container - keys domain. This is a performance hint: hash containers might, but aren't required to throw IllegalArgumentException on inserting a key out of the keys domain.

By default, all keys are allowed (keys domain is a whole range of bytes, from Byte.MIN_VALUE to Byte.MAX_VALUE.

For example, map keys or elements of the set could be unique IDs, counting from 1, thus it's guaranteed that these keys are positive. Or one specific key has a special meaning in the logic of your application. When you are sure that some keys range could never be put into hash container, it is recommended to configure corresponding factory, which extends this interface, with complement of that range as keys domain (or, alternatively, with that range as keys domain complement).

It's OK to specify keys domain which include some actually impossible keys, but you shouldn't leave a single valid key out of the domain. If the set of possible (impossible) keys consist of several ranges, and/or standalone keys, it is still recommended to specify the domain to "forbid" some impossible keys. For example, if possible keys are odd numbers, you should exclude one even number, zero:

factory = factory.withKeysDomainComplement((byte) 0, (byte) 0);


Method Summary
 byte getLowerKeyDomainBound()
          Returns lower (inclusive) bound of keys domain.
 byte getUpperKeyDomainBound()
          Returns upper (inclusive) bound of keys domain.
 F withKeysDomain(byte minPossibleKey, byte maxPossibleKey)
          Returns a copy of this factory with keys domain set to the specified range.
 F withKeysDomainComplement(byte minImpossibleKey, byte maxImpossibleKey)
          Returns a copy of this factory with keys domain set to the complement of the specified range.
 
Methods inherited from interface com.koloboke.collect.hash.HashContainerFactory
getHashConfig, withHashConfig
 
Methods inherited from interface com.koloboke.collect.ContainerFactory
getDefaultExpectedSize, withDefaultExpectedSize
 

Method Detail

getLowerKeyDomainBound

byte getLowerKeyDomainBound()
Returns lower (inclusive) bound of keys domain.

Default: Byte.MIN_VALUE.

Returns:
lower (inclusive) bound of keys domain

getUpperKeyDomainBound

byte getUpperKeyDomainBound()
Returns upper (inclusive) bound of keys domain.

Default: Byte.MAX_VALUE.

Returns:
upper (inclusive) bound of keys domain

withKeysDomain

F withKeysDomain(byte minPossibleKey,
                 byte maxPossibleKey)
Returns a copy of this factory with keys domain set to the specified range.

This is a performance hint: hash containers might, but aren't required to throw IllegalArgumentException on putting key out of the keys domain.

Example:

 // only positive keys
 factory = factory.withKeysDomain((byte) 1, Byte.MAX_VALUE);

Parameters:
minPossibleKey - lower (inclusive) bound of the target keys domain
maxPossibleKey - upper (inclusive) bound of the target keys domain
Returns:
a copy of this factory with keys domain set to the specified range
Throws:
IllegalArgumentException - if minPossibleKey is greater than maxPossibleKey

withKeysDomainComplement

F withKeysDomainComplement(byte minImpossibleKey,
                           byte maxImpossibleKey)
Returns a copy of this factory with keys domain set to the complement of the specified range.

This is a performance hint: hash containers might, but aren't required to throw IllegalArgumentException on putting key out of the keys domain.

This method is needed to specify keys domain that include both Byte.MIN_VALUE and Byte.MAX_VALUE, but with a "hole" somewhere in between. Providing a single withKeysDomain(byte, byte) method for this and "ordinary" keys domain application is error-prone, because there is no way to distinguish intention (domain with a "hole") and mistakenly reordered arguments while attempting to specify "ordinary" domain.

Example:

 // any keys except 0
 factory = factory.withKeysDomainComplement((byte) 0, (byte) 0);

Parameters:
minImpossibleKey - upper (exclusive) bound of the target keys domain
maxImpossibleKey - lower (exclusive) bound of the target keys domain
Returns:
a copy of this factory with keys domain set to the complement of the specified range
Throws:
IllegalArgumentException - if minImpossibleKey is greater than maxImpossibleKey