lkml.org 
[lkml]   [2022]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/7] rust: sync: allow type of `self` to be `ArcBorrow<T>`
    Date
    This allows associated functions whose `self` argument has
    `ArcBorrow<T>` as their type. This, in turn, allows callers to use the
    dot syntax to make calls.

    Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com>
    ---
    rust/kernel/sync/arc.rs | 23 +++++++++++++++++++++++
    1 file changed, 23 insertions(+)

    diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
    index f68bfc02c81a..84f31c85a513 100644
    --- a/rust/kernel/sync/arc.rs
    +++ b/rust/kernel/sync/arc.rs
    @@ -255,11 +255,34 @@ impl<T: ?Sized> Drop for Arc<T> {
    /// // Assert that both `obj` and `cloned` point to the same underlying object.
    /// assert!(core::ptr::eq(&*obj, &*cloned));
    /// ```
    +///
    +/// Using `ArcBorrow<T>` as the type of `self`:
    +///
    +/// ```
    +/// use crate::sync::{Arc, ArcBorrow};
    +///
    +/// struct Example {
    +/// a: u32,
    +/// b: u32,
    +/// }
    +///
    +/// impl Example {
    +/// fn use_reference(self: ArcBorrow<'_, Self>) {
    +/// // ...
    +/// }
    +/// }
    +///
    +/// let obj = Arc::try_new(Example { a: 10, b: 20 })?;
    +/// obj.as_arc_borrow().use_reference();
    +/// ```
    pub struct ArcBorrow<'a, T: ?Sized + 'a> {
    inner: NonNull<ArcInner<T>>,
    _p: PhantomData<&'a ()>,
    }

    +// This is to allow [`ArcBorrow`] (and variants) to be used as the type of `self`.
    +impl<T: ?Sized> core::ops::Receiver for ArcBorrow<'_, T> {}
    +
    impl<T: ?Sized> Clone for ArcBorrow<'_, T> {
    fn clone(&self) -> Self {
    *self
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-03-26 23:22    [W:7.372 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site