Packed Pointers
A configurable & generic tagged pointer implementation in Rust.
A Tagged Pointer is a technique to store a value and a tag (some data) in a single pointer. This implementation allows you to use both the LSB & MSB for the tag, configured using a generic parameter.
Usage
Portable Usage
use PackedPtr;
use AlignOnly;
let data = 0xdeadbeefu32;
let ptr = new.unwrap;
assert_eq!;
assert_eq!;
Platform Specific Usage
On x86_64, using level 4 paging, the 16 most significant bits are unused.
Therefore, we can pack 18 bits of data into a *const u32.
use PackedPtr;
use Level4Paging;
let data = 0xdeadbeefu32;
let ptr = new.unwrap;
assert_eq!;
assert_eq!;
Type Safe Data
packed_ptr provides a type safe interface for storing & retrieving data from a pointer.
The data must implement Packable, and it can be packed into a pointer using TypedPackedPtr.
use TypedPackedPtr;
use AlignOnly;
let data = 0xdeadbeefu32;
let packed = ;
let ptr = new.unwrap;
assert_eq!;
assert_eq!;
References
packed_ptr also provides a type safe interface for storing & retrieving packed data from a reference.
use PackedRef;
use AlignOnly;
let data = 0xdeadbeefu32;
let packed = ;
let ref1 = new.unwrap;
assert_eq!;
assert_eq!;