A safe library for tagged union pointers. This library supports putting up to 8 Packable3
types in a 64-bit word. A type can implement Packable3
if it supports a bijection to a 61-bit number. The supported operations are packing, unpacking, unpacked references for matching and mutation.
Provided types are ()
, bool
, u16
, u32
, f32
, &'a T'
, Rc<T>
,Box<T>
, *T
, *mut T
.
```
type ThinVal = Packed
fn testexample() { let mut y : ThinVal = Unpacked::C(1.6f32).pack(); match *y.unpackmut() { Unpacked::A(ref mut b) => *b += 1, Unpacked::B(ref mut b) => *b += 5, Unpacked::C(ref mut f) => {*f += 4.8f32}, Unpacked::D(ref mut u) => *u += 2, Unpacked::E(ref mut b) => *b ^= true, _ => panic!() } println!("{:?}", y.unpack()); } ```
Add this to your Cargo.toml:
[dependencies]
tagged_ptr = "0.1"
and this to your crate root:
extern crate tagged_ptr;
Dual-licensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.