mirror of
https://github.com/Noratrieb/vechonk.git
synced 2026-01-15 09:05:08 +01:00
layout
This commit is contained in:
parent
c107680b95
commit
0764c02fa5
2 changed files with 68 additions and 3 deletions
43
src/lib.rs
43
src/lib.rs
|
|
@ -1,9 +1,46 @@
|
|||
#![no_std]
|
||||
#![feature(ptr_metadata)]
|
||||
#![feature(ptr_metadata, ptr_internals)]
|
||||
|
||||
//!
|
||||
//! A `Vec<T: ?Sized>`
|
||||
//!
|
||||
//! It's implemented by laying out the elements in memory contiguously like `alloc::vec::Vec`
|
||||
//! It's implemented by laying out the elements in memory contiguously like [`alloc::vec::Vec`]
|
||||
//!
|
||||
//! # Layout
|
||||
//!//!
|
||||
//! A [`Vechonk`] is 3 `usize` long. It owns a single allocation, containing the elements and the metadata.
|
||||
//! The elements are laid out contiguously from the front, while the metadata is laid out contiguously from the back.
|
||||
//! Both grow towards the center until they meet and get realloced to separate them again.
|
||||
//!
|
||||
//! ```txt
|
||||
//!
|
||||
//! Vechonk<str>
|
||||
//! ------------------------
|
||||
//! | ptr | len | cap |
|
||||
//! ---|---------------------
|
||||
//! |
|
||||
//! |___
|
||||
//! |
|
||||
//! Heap v
|
||||
//! ------------------------------------------------------------------------
|
||||
//! | "hello" | "uwu" | <uninit> | 0 - 5 | 5 - 3 |
|
||||
//! |-----------|----------|-----------------|--------------|--------------|
|
||||
//! | dynamic | dynamic | rest of alloc | usize + meta | usize + meta |
|
||||
//! --------------------------------------------|--------------|------------
|
||||
//! ^ ^ | |
|
||||
//! |___________ | _________________________| |
|
||||
//! |_________________________________________|
|
||||
//! ```
|
||||
|
||||
struct Vechonk<T: ?Sized>;
|
||||
extern crate alloc;
|
||||
|
||||
use core::marker::PhantomData;
|
||||
use core::ptr::{NonNull};
|
||||
use alloc::vec::Vec;
|
||||
|
||||
/// chonky af
|
||||
struct Vechonk<T: ?Sized> {
|
||||
size: usize,
|
||||
cap: usize,
|
||||
ptrs: Vec<NonNull<T>>
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue