diff --git a/Cargo.lock b/Cargo.lock index 5cc1222..c04dc24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2448,6 +2448,8 @@ "bevy", "bevy_egui", "crossbeam", + "memmap2", + "thiserror 2.0.18", ] [[package]] diff --git a/engine-core/Cargo.toml b/engine-core/Cargo.toml index 70e02da..29c8007 100644 --- a/engine-core/Cargo.toml +++ b/engine-core/Cargo.toml @@ -6,6 +6,8 @@ [dependencies] bevy_egui = "0.39.1" crossbeam = { version = "0.8.4", features = ["crossbeam-channel"] } +memmap2 = "0.9.10" +thiserror = "2.0.18" [dependencies.bevy] version = "0.18.1" diff --git a/engine-core/src/ephemeral_pool.rs b/engine-core/src/ephemeral_pool.rs new file mode 100644 index 0000000..59d9000 --- /dev/null +++ b/engine-core/src/ephemeral_pool.rs @@ -0,0 +1,41 @@ +use std::{alloc::Allocator, io}; + +use memmap2::{MmapMut, MmapRaw}; +use thiserror::Error; + +#[derive(Error, Debug)] +enum Error { + #[error(transparent)] + Io(#[from] io::Error), +} + +type Result = std::result::Result; + +struct EphemralPoolAllocator { + raw_pool: memmap2::MmapRaw, +} + +struct EphemralPoolAllocatorUnit { + dealloc_callback: Box, +} + +unsafe impl Allocator for EphemralPoolAllocatorUnit { + fn allocate( + &self, + layout: std::alloc::Layout, + ) -> Result, std::alloc::AllocError> { + todo!() + } + + unsafe fn deallocate(&self, ptr: std::ptr::NonNull, layout: std::alloc::Layout) { + todo!() + } +} + +impl EphemralPoolAllocator { + fn new(size: usize) -> Result { + Ok(Self { + raw_pool: MmapMut::map_anon(size)?.into(), + }) + } +} diff --git a/engine-core/src/ephemral_pool.rs b/engine-core/src/ephemral_pool.rs deleted file mode 100644 index e69de29..0000000 --- a/engine-core/src/ephemral_pool.rs +++ /dev/null diff --git a/engine-core/src/lib.rs b/engine-core/src/lib.rs index 5e02785..43665ca 100644 --- a/engine-core/src/lib.rs +++ b/engine-core/src/lib.rs @@ -22,6 +22,7 @@ use crate::debug::{DebugLogLayer, DebugPlugin}; pub mod debug; +pub mod ephemeral_pool; pub static EXTERNAL_SYSTEMS_CMDS: OnceLock< crossbeam::channel::Sender Result>>,