mirror of https://github.com/torvalds/linux.git
rust: sync: implement == operator for ARef
Rust Binder wants to perform a comparison between ARef<Task> and &Task, so define the == operator for ARef<_> when compared with another ARef<_> or just a reference. The operator is implemented in terms of the same operator applied to the inner type. Note that PartialEq<U> cannot be implemented because it would overlap with the impl for ARef<U>. Reviewed-by: Gary Guo <gary@garyguo.net> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Link: https://patch.msgid.link/20260324-close-fd-check-current-v3-1-b94274bedac7@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5326a18e3e
commit
18e9fafb26
|
|
@ -170,3 +170,25 @@ fn drop(&mut self) {
|
|||
unsafe { T::dec_ref(self.ptr) };
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, U> PartialEq<ARef<U>> for ARef<T>
|
||||
where
|
||||
T: AlwaysRefCounted + PartialEq<U>,
|
||||
U: AlwaysRefCounted,
|
||||
{
|
||||
#[inline]
|
||||
fn eq(&self, other: &ARef<U>) -> bool {
|
||||
T::eq(&**self, &**other)
|
||||
}
|
||||
}
|
||||
impl<T: AlwaysRefCounted + Eq> Eq for ARef<T> {}
|
||||
|
||||
impl<T, U> PartialEq<&'_ U> for ARef<T>
|
||||
where
|
||||
T: AlwaysRefCounted + PartialEq<U>,
|
||||
{
|
||||
#[inline]
|
||||
fn eq(&self, other: &&U) -> bool {
|
||||
T::eq(&**self, other)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue