pub struct XArray<T: ForeignOwnable> { /* private fields */ }
Expand description
An array which efficiently maps sparse integer indices to owned objects.
This is similar to a crate::alloc::kvec::Vec<Option<T>>
, but more efficient when there are
holes in the index space, and can be efficiently grown.
§Invariants
self.xa
is always an initialized and valid [bindings::xarray
] whose entries are either
XA_ZERO_ENTRY
or came from T::into_foreign
.
§Examples
use kernel::alloc::KBox;
use kernel::xarray::{AllocKind, XArray};
let xa = KBox::pin_init(XArray::new(AllocKind::Alloc1), GFP_KERNEL)?;
let dead = KBox::new(0xdead, GFP_KERNEL)?;
let beef = KBox::new(0xbeef, GFP_KERNEL)?;
let mut guard = xa.lock();
assert_eq!(guard.get(0), None);
assert_eq!(guard.store(0, dead, GFP_KERNEL)?.as_deref(), None);
assert_eq!(guard.get(0).copied(), Some(0xdead));
*guard.get_mut(0).unwrap() = 0xffff;
assert_eq!(guard.get(0).copied(), Some(0xffff));
assert_eq!(guard.store(0, beef, GFP_KERNEL)?.as_deref().copied(), Some(0xffff));
assert_eq!(guard.get(0).copied(), Some(0xbeef));
guard.remove(0);
assert_eq!(guard.get(0), None);
Implementations§
Source§impl<T: ForeignOwnable> XArray<T>
impl<T: ForeignOwnable> XArray<T>
Trait Implementations§
Source§impl<T: ForeignOwnable> Drop for XArray<T>
impl<T: ForeignOwnable> Drop for XArray<T>
Source§impl<T: ForeignOwnable> HasPinData for XArray<T>
impl<T: ForeignOwnable> HasPinData for XArray<T>
Source§impl<T: ForeignOwnable> PinnedDrop for XArray<T>
impl<T: ForeignOwnable> PinnedDrop for XArray<T>
impl<T: ForeignOwnable + Send> Send for XArray<T>
impl<T: ForeignOwnable + Send> Sync for XArray<T>
Auto Trait Implementations§
impl<T> !Freeze for XArray<T>
impl<T> !RefUnwindSafe for XArray<T>
impl<T> UnwindSafe for XArray<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more