Skip to content

Commit 6c5d7fc

Browse files
committed
Use associated type for SharedMemoryManager
1 parent 8986eb9 commit 6c5d7fc

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

glib/src/shared.rs

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,17 @@ macro_rules! glib_shared_wrapper {
5959
}
6060

6161
#[doc(hidden)]
62-
impl $(<$($generic $(: $bound $(+ $bound2)*)?),+>)? $crate::shared::SharedMemoryManager<$ffi_name> for $name $(<$($generic),+>)? {
62+
impl $(<$($generic $(: $bound $(+ $bound2)*)?),+>)? $crate::shared::SharedMemoryManager for $name $(<$($generic),+>)? {
63+
type Target = $ffi_name;
64+
6365
#[inline]
64-
unsafe fn ref_($ref_arg: *mut $ffi_name) {
66+
unsafe fn ref_($ref_arg: *mut Self::Target) {
6567
$ref_expr;
6668
}
6769

6870
#[inline]
6971
#[allow(clippy::no_effect)]
70-
unsafe fn unref($unref_arg: *mut $ffi_name) {
72+
unsafe fn unref($unref_arg: *mut Self::Target) {
7173
$unref_expr;
7274
}
7375
}
@@ -436,29 +438,31 @@ macro_rules! glib_shared_wrapper {
436438
};
437439
}
438440

439-
pub trait SharedMemoryManager<T> {
441+
pub trait SharedMemoryManager {
442+
type Target;
443+
440444
/// # Safety
441445
///
442446
/// Callers are responsible for ensuring that a matching call to `unref`
443447
/// is made at an appropriate time.
444-
unsafe fn ref_(ptr: *mut T);
448+
unsafe fn ref_(ptr: *mut Self::Target);
445449

446450
/// # Safety
447451
///
448452
/// Callers are responsible for ensuring that a matching call to `ref` was
449453
/// made before this is called, and that the pointer is not used after the
450454
/// `unref` call.
451-
unsafe fn unref(ptr: *mut T);
455+
unsafe fn unref(ptr: *mut Self::Target);
452456
}
453457

454458
/// Encapsulates memory management logic for shared types.
455459
#[repr(transparent)]
456-
pub struct Shared<T, MM: SharedMemoryManager<T>> {
460+
pub struct Shared<T, MM: SharedMemoryManager<Target = T>> {
457461
inner: ptr::NonNull<T>,
458462
mm: PhantomData<*const MM>,
459463
}
460464

461-
impl<T, MM: SharedMemoryManager<T>> Drop for Shared<T, MM> {
465+
impl<T, MM: SharedMemoryManager<Target = T>> Drop for Shared<T, MM> {
462466
#[inline]
463467
fn drop(&mut self) {
464468
unsafe {
@@ -467,7 +471,7 @@ impl<T, MM: SharedMemoryManager<T>> Drop for Shared<T, MM> {
467471
}
468472
}
469473

470-
impl<T, MM: SharedMemoryManager<T>> Clone for Shared<T, MM> {
474+
impl<T, MM: SharedMemoryManager<Target = T>> Clone for Shared<T, MM> {
471475
#[inline]
472476
fn clone(&self) -> Self {
473477
unsafe {
@@ -480,38 +484,38 @@ impl<T, MM: SharedMemoryManager<T>> Clone for Shared<T, MM> {
480484
}
481485
}
482486

483-
impl<T, MM: SharedMemoryManager<T>> fmt::Debug for Shared<T, MM> {
487+
impl<T, MM: SharedMemoryManager<Target = T>> fmt::Debug for Shared<T, MM> {
484488
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
485489
f.debug_struct("Shared")
486490
.field("inner", &self.inner)
487491
.finish()
488492
}
489493
}
490494

491-
impl<T, MM: SharedMemoryManager<T>> PartialOrd for Shared<T, MM> {
495+
impl<T, MM: SharedMemoryManager<Target = T>> PartialOrd for Shared<T, MM> {
492496
#[inline]
493497
fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
494498
self.inner.partial_cmp(&other.inner)
495499
}
496500
}
497501

498-
impl<T, MM: SharedMemoryManager<T>> Ord for Shared<T, MM> {
502+
impl<T, MM: SharedMemoryManager<Target = T>> Ord for Shared<T, MM> {
499503
#[inline]
500504
fn cmp(&self, other: &Self) -> cmp::Ordering {
501505
self.inner.cmp(&other.inner)
502506
}
503507
}
504508

505-
impl<T, MM: SharedMemoryManager<T>> PartialEq for Shared<T, MM> {
509+
impl<T, MM: SharedMemoryManager<Target = T>> PartialEq for Shared<T, MM> {
506510
#[inline]
507511
fn eq(&self, other: &Self) -> bool {
508512
self.inner == other.inner
509513
}
510514
}
511515

512-
impl<T, MM: SharedMemoryManager<T>> Eq for Shared<T, MM> {}
516+
impl<T, MM: SharedMemoryManager<Target = T>> Eq for Shared<T, MM> {}
513517

514-
impl<T, MM: SharedMemoryManager<T>> Hash for Shared<T, MM> {
518+
impl<T, MM: SharedMemoryManager<Target = T>> Hash for Shared<T, MM> {
515519
#[inline]
516520
fn hash<H>(&self, state: &mut H)
517521
where
@@ -523,7 +527,7 @@ impl<T, MM: SharedMemoryManager<T>> Hash for Shared<T, MM> {
523527

524528
impl<'a, T: 'static, MM> ToGlibPtr<'a, *mut T> for Shared<T, MM>
525529
where
526-
MM: SharedMemoryManager<T> + 'static,
530+
MM: SharedMemoryManager<Target = T> + 'static,
527531
{
528532
type Storage = PhantomData<&'a Self>;
529533

@@ -541,7 +545,7 @@ where
541545
}
542546
}
543547

544-
impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrNone<*mut T> for Shared<T, MM> {
548+
impl<T: 'static, MM: SharedMemoryManager<Target = T>> FromGlibPtrNone<*mut T> for Shared<T, MM> {
545549
#[inline]
546550
unsafe fn from_glib_none(ptr: *mut T) -> Self {
547551
debug_assert!(!ptr.is_null());
@@ -553,7 +557,7 @@ impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrNone<*mut T> for Shared<
553557
}
554558
}
555559

556-
impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrNone<*const T> for Shared<T, MM> {
560+
impl<T: 'static, MM: SharedMemoryManager<Target = T>> FromGlibPtrNone<*const T> for Shared<T, MM> {
557561
#[inline]
558562
unsafe fn from_glib_none(ptr: *const T) -> Self {
559563
debug_assert!(!ptr.is_null());
@@ -565,7 +569,7 @@ impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrNone<*const T> for Share
565569
}
566570
}
567571

568-
impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrFull<*mut T> for Shared<T, MM> {
572+
impl<T: 'static, MM: SharedMemoryManager<Target = T>> FromGlibPtrFull<*mut T> for Shared<T, MM> {
569573
#[inline]
570574
unsafe fn from_glib_full(ptr: *mut T) -> Self {
571575
debug_assert!(!ptr.is_null());
@@ -576,7 +580,7 @@ impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrFull<*mut T> for Shared<
576580
}
577581
}
578582

579-
impl<T: 'static, MM: SharedMemoryManager<T>> FromGlibPtrBorrow<*mut T> for Shared<T, MM> {
583+
impl<T: 'static, MM: SharedMemoryManager<Target = T>> FromGlibPtrBorrow<*mut T> for Shared<T, MM> {
580584
#[inline]
581585
unsafe fn from_glib_borrow(ptr: *mut T) -> Borrowed<Self> {
582586
debug_assert!(!ptr.is_null());

0 commit comments

Comments
 (0)