Skip to main content

IdrGuard

Struct IdrGuard 

Source
pub struct IdrGuard<'a, T: RcuDroppable + Send + Sync + 'static, L: LockLevel> { /* private fields */ }
Expand description

An RAII guard representing exclusive writer access to an Idr.

Holding this guard serializes mutations (allocations, reservations, removals) to the radix tree while allowing concurrent lock-free reads.

Implementations§

Source§

impl<'a, T: RcuDroppable + Send + Sync + 'static, L: LockLevel> IdrGuard<'a, T, L>

Source

pub fn alloc<F>(&mut self, factory: F) -> Option<(u32, Arc<T>)>
where F: FnOnce(u32) -> Arc<T>,

Allocates the next available ID by calling a factory providing the newly acquired ID.

Depending on the Idr configuration, allocation will be either linear starting from 0, or cyclic starting from the previous cursor position.

Source

pub fn reserve_id(&mut self, id: u32)

Marks a specific ID as unavailable so the allocator will never return it. Does not populate the tree with an item.

Source

pub fn remove(&mut self, id: u32)

Removes an item by ID.

Methods from Deref<Target = Idr<T, L>>§

Source

pub fn max(&self) -> u32

Returns the maximal value allowed for allocation in this Idr.

Source

pub fn set_max(&self, max: u32)

Sets the maximal value allowed for allocation in this Idr.

Source

pub fn lock(&self) -> IdrGuard<'_, T, L>

Acquires the writer lock, returning an IdrGuard that provides mutating operations.

Source

pub fn lookup(&self, id: u32, scope: &RcuReadScope) -> Option<Arc<T>>

RCU protected lock-free lookup for readers

Source

pub fn iter<'a>(&'a self, scope: &'a RcuReadScope) -> IdrIterator<'a, T> ⓘ

Returns a lock-free RCU iterator over all entries

Trait Implementations§

Source§

impl<'a, T: RcuDroppable + Send + Sync + 'static, L: LockLevel> Deref for IdrGuard<'a, T, L>

Source§

type Target = Idr<T, L>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a, T, L> !RefUnwindSafe for IdrGuard<'a, T, L>

§

impl<'a, T, L> !Send for IdrGuard<'a, T, L>

§

impl<'a, T, L> !UnwindSafe for IdrGuard<'a, T, L>

§

impl<'a, T, L> Freeze for IdrGuard<'a, T, L>

§

impl<'a, T, L> Sync for IdrGuard<'a, T, L>
where L: Sync,

§

impl<'a, T, L> Unpin for IdrGuard<'a, T, L>

§

impl<'a, T, L> UnsafeUnpin for IdrGuard<'a, T, L>

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

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, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<F, N> FidlIntoNative<Box<N>> for F
where F: FidlIntoNative<N>,

§

fn fidl_into_native(self) -> Box<N>

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> InstanceFromServiceTransport<T> for T

§

fn from_service_transport(handle: T) -> T

Converts the given service transport handle of type T to [Self]
Source§

impl<T, U> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T, U> IntoExt<U> for T
where U: FromExt<T>,

§

fn into_ext(self) -> U

Performs the conversion.
Source§

impl<T, U> IntoFidl<U> for T
where U: FromFidl<T>,

Source§

fn into_fidl(self) -> U

Source§

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

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
§

impl<E> RunsTransport<Mpsc> for E

§

impl<E> RunsTransport<Mpsc> for E
where E: RunsTransport<Mpsc>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.
§

impl<T, U> TryIntoExt<U> for T
where U: TryFromExt<T>,

§

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

§

fn try_into_ext(self) -> Result<U, <T as TryIntoExt<U>>::Error>

Tries to perform the conversion.
§

impl<St> WithTag for St

§

fn tagged<T>(self, tag: T) -> Tagged<T, St> ⓘ

Produce a new stream from this one which yields item tupled with a constant tag