/// Guarantees uniqueness only if `Weak` pointers are never created /// from this `Arc` or clones. pub(crate) fn is_arc_unique<M>(arc: &mut Arc<M>) -> bool { let strong_count = Arc::strong_count(&*arc);
debug_assert_ne!(strong_count, 0, "This Arc should exist");
/// Can be used instead of `Arc::try_unwrap(arc).unwrap()` /// when it is guaranteed to succeed. pub(crate) unsafefn arc_unwrap<M>(mut arc: Arc<M>) -> M { use core::{mem::ManuallyDrop, ptr::read};
debug_assert!(is_arc_unique(&mut arc));
// Get raw pointer to inner value. let raw = Arc::into_raw(arc);
// As `Arc` is unique and no Weak pointers exist // it won't be dereferenced elsewhere. let inner = read(raw);
// Cast to `ManuallyDrop` which guarantees to have same layout // and will skip dropping.
drop(Arc::from_raw(raw as *const ManuallyDrop<M>));
inner
}
/// Can be used instead of `Arc::try_unwrap` /// only if `Weak` pointers are never created from this `Arc` or clones. pub(crate) unsafefn try_arc_unwrap<M>(mut arc: Arc<M>) -> Option<M> { if is_arc_unique(&mut arc) {
Some(arc_unwrap(arc))
} else {
None
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-18)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.