Skip to main content

ParObjPool

Struct ParObjPool 

Source
pub struct ParObjPool<T, const S: usize> { /* private fields */ }
Expand description

A sharded, thread-safe object pool.

An external ObjId packs the shard index into its highest SHARD_BITS bits, where SHARD_BITS is the smallest number of bits able to represent all shard indices 0..S. The remaining low bits hold the object index inside the shard, so each shard can hold up to 2^(32 - SHARD_BITS) - 1 objects.

In debug builds every ParObjPool additionally mixes its own random tag into the external ObjIds it issues, so ids of one pool are (with overwhelming probability) rejected by any other pool. See the crate-level documentation for details.

Implementations§

Source§

impl<T, const S: usize> ParObjPool<T, S>

Source

pub fn new() -> Self

Source

pub fn insert(&self, object: T) -> ObjId

Source

pub fn remove(&self, obj_id: ObjId) -> Option<T>

Source

pub fn get(&self, obj_id: ObjId) -> Option<MappedRwLockReadGuard<'_, T>>

Source

pub fn try_get(&self, obj_id: ObjId) -> Option<MappedRwLockReadGuard<'_, T>>

Source

pub fn get_mut(&self, obj_id: ObjId) -> Option<MappedRwLockWriteGuard<'_, T>>

Source

pub fn try_get_mut( &self, obj_id: ObjId, ) -> Option<MappedRwLockWriteGuard<'_, T>>

Source

pub fn clear(&self)

Source

pub fn shrink_to_fit(&self)

Source

pub fn capacity(&self) -> usize

Trait Implementations§

Source§

impl<T, const S: usize> Default for ParObjPool<T, S>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T, const S: usize> !Freeze for ParObjPool<T, S>

§

impl<T, const S: usize> !RefUnwindSafe for ParObjPool<T, S>

§

impl<T, const S: usize> Send for ParObjPool<T, S>
where T: Send,

§

impl<T, const S: usize> Sync for ParObjPool<T, S>
where T: Send + Sync,

§

impl<T, const S: usize> Unpin for ParObjPool<T, S>
where T: Unpin,

§

impl<T, const S: usize> UnsafeUnpin for ParObjPool<T, S>

§

impl<T, const S: usize> UnwindSafe for ParObjPool<T, S>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.