#[cfg(not(feature = "std"))] mod spin { //! This is the `once_cell::sync::Lazy` type, but modified to use our //! `spin::Once` type rather than `OnceCell`. This is used to replace //! `once_cell::sync::Lazy` on `no-std` builds. usecrate::spin::Once; use core::{cell::Cell, fmt, ops::Deref};
/// Re-implementation of `once_cell::sync::Lazy` on top of `spin::Once` /// rather than `OnceCell`. /// /// This is used when the standard library is disabled. pub(crate) struct Lazy<T, F = fn() -> T> {
cell: Once<T>,
init: Cell<Option<F>>,
}
// We never create a `&F` from a `&Lazy<T, F>` so it is fine to not impl // `Sync` for `F`. We do create a `&mut Option<F>` in `force`, but this is // properly synchronized, so it only happens once so it also does not // contribute to this impl. unsafeimpl<T, F: Send> Sync for Lazy<T, F> where Once<T>: Sync {} // auto-derived `Send` impl is OK.
impl<T, F> Lazy<T, F> { /// Creates a new lazy value with the given initializing function. pub(crate) constfn new(init: F) -> Lazy<T, F> {
Lazy {
cell: Once::new(),
init: Cell::new(Some(init)),
}
}
}
impl<T, F: FnOnce() -> T> Lazy<T, F> { /// Forces the evaluation of this lazy value and returns a reference to /// the result. /// /// This is equivalent to the `Deref` impl, but is explicit. pub(crate) fn force(this: &Lazy<T, F>) -> &T {
this.cell.call_once(|| match this.init.take() {
Some(f) => f(),
None => panic!("Lazy instance has previously been poisoned"),
})
}
}
impl<T: Default> Default for Lazy<T> { /// Creates a new lazy value using `Default` as the initializing function. fn default() -> Lazy<T> {
Lazy::new(T::default)
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.18 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.