#![cfg_attr(docsrs, feature(doc_cfg))]
#![doc(
html_logo_url = "https://bevy.org/assets/icon.png",
html_favicon_url = "https://bevy.org/assets/icon.png"
)]
#![no_std]
pub mod cfg {
pub(crate) use bevy_platform::cfg::*;
pub use bevy_platform::cfg::{alloc, std};
define_alias! {
#[cfg(feature = "parallel")] => {
parallel
}
}
}
cfg::std! {
extern crate std;
}
cfg::alloc! {
extern crate alloc;
mod map;
pub use map::*;
}
cfg::parallel! {
mod parallel_queue;
pub use parallel_queue::*;
}
pub mod prelude {
pub use crate::debug_info::DebugName;
pub use crate::default;
pub use disqualified::ShortName;
}
mod debug_info;
mod default;
mod once;
#[doc(hidden)]
pub use once::OnceFlag;
pub use default::default;
use core::mem::ManuallyDrop;
pub struct OnDrop<F: FnOnce()> {
callback: ManuallyDrop<F>,
}
impl<F: FnOnce()> OnDrop<F> {
pub fn new(callback: F) -> Self {
Self {
callback: ManuallyDrop::new(callback),
}
}
}
impl<F: FnOnce()> Drop for OnDrop<F> {
fn drop(&mut self) {
#![expect(
unsafe_code,
reason = "Taking from a ManuallyDrop requires unsafe code."
)]
let callback = unsafe { ManuallyDrop::take(&mut self.callback) };
callback();
}
}