From c54e5531aaa98846cb4bec96cf9fce1435bf54bd Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sun, 10 Apr 2022 15:06:37 +0200 Subject: [PATCH] add pointer tag --- Cargo.toml | 2 -- src/lib.rs | 1 + src/tag.rs | 17 +++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/tag.rs diff --git a/Cargo.toml b/Cargo.toml index e538c8e..295200f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,6 @@ categories = ["data-structures", "memory-management", "no-std"] include = ["Cargo.toml", "LICENSE", "src", "README.md"] rust-version = "1.34.2" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] sptr = "0.3.1" diff --git a/src/lib.rs b/src/lib.rs index a7b72a5..4f35c92 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -92,6 +92,7 @@ extern crate alloc; // we want that for tests so we can use `Box` mod backend; mod strategy; +mod tag; use core::{ fmt::{Debug, Formatter}, diff --git a/src/tag.rs b/src/tag.rs new file mode 100644 index 0000000..858d362 --- /dev/null +++ b/src/tag.rs @@ -0,0 +1,17 @@ +use core::marker::PhantomData; + +use crate::Backend; + +pub struct TaggedPtr(B::Stored, PhantomData) +where + B: Backend; + +pub trait TaggingStrategy { + type Tag; + + fn get_tag(data: B) -> Self::Tag; + + fn get_ptr_addr(data: B) -> usize; + + fn set(addr: usize, tag: Self::Tag) -> B; +}