Enum member std.bitmanip.taggedPointer
This string mixin generator allows one to create tagged pointers inside structs and classes.
enum taggedPointer(T, string name, Ts...)
= createTaggedReference!(T*, T .alignof, name, Ts) .result;
A tagged pointer uses the bits known to be zero in a normal pointer or class reference to store extra information. For example, a pointer to an integer must be 4-byte aligned, so there are 2 bits that are always known to be zero. One can store a 2-bit integer there.
The example above creates a tagged pointer in the struct A. The pointer is of type
uint*
as specified by the first argument, and is named x, as specified by the second
argument.
Following arguments works the same way as bitfield
's. The bitfield must fit into the
bits known to be zero because of the pointer alignment.
Example
struct A
{
int a;
mixin(taggedPointer!(
uint*, "x",
bool, "b1", 1,
bool, "b2", 1));
}
A obj;
obj .x = new uint;
obj .b1 = true;
obj .b2 = false;
Authors
Walter Bright, Andrei Alexandrescu, Jonathan M Davis, Alex Rønne Petersen, Damian Ziemba, Amaury SECHET