Keeps track of free ids within a specified range, handles requests and returns of ids based on internal state.
Internally, a collection of free id ranges is stored. On a request for an id from the pool, the lowest available number will be returned to the caller. Ids can also be returned to the pool to be reused by subsequent id requests.
// initialize a new pool let mut pool = IdPool::new(); // request some ids assert_eq!(Some(1), pool.request_id()); assert_eq!(Some(2), pool.request_id()); assert_eq!(Some(3), pool.request_id()); // return the first id assert_eq!(Ok(()), pool.return_id(1)); // next request returns recycled first id assert_eq!(Some(1), pool.request_id()); // subsequent request returns the next free value assert_eq!(Some(4), pool.request_id());
Creates a new
IdPool with a default range, which
1 and ends at
pub fn new_ranged(range: Range<usize>) -> Self[src]
Creates a new
IdPool with the given range.
pub fn used_count(&self) -> usize[src]
Gets the current count of used ids.
pub fn request_id(&mut self) -> Option<usize>[src]
Returns a new id or
None if there are no free ids
in the pool.
Returns an id to the pool or
Err(Num) if the
id is already in the pool.
impl RefUnwindSafe for IdPool
impl UnwindSafe for IdPool
type Owned = T
The resulting type after obtaining ownership.
pub fn clone_into(&self, target: &mut T)[src]
type Error = Infallible
The type returned in the event of a conversion error.