New abstraction: Layout

Steven Schveighoffer schveiguy at yahoo.com
Sat Feb 17 13:19:46 UTC 2018


On 2/16/18 7:04 PM, Andrei Alexandrescu wrote:
> I've been long bothered that the builtin .tupleof and our own 
> abstractions Fields and RepresentationTypeTuple in std.traits - all omit 
> the essential information of field offsets. That makes types that use 
> align() to have the same .tupleof, Fields, and RepresentationTypeTuple 
> even though they shouldn't.
> 
> The right answer is Layout a tuple of (offset, type) pairs describing 
> entirely the memory layout of a type. We need such for memory 
> allocation, garbage collection, serialization, and more.
> 
> The implementation turned out to be quite compact - 81 lines including a 
> compile-time mergesort. Destroy!
> 
> https://github.com/dlang/phobos/pull/6192

Can't you just use offsetof?

struct S
{
    ubyte x;
    int y;
}

static foreach(i; 0 .. s.tupleof.length)
{
    writeln(s.tupleof[i].offsetof);
}

outputs:
0
4

-Steve


More information about the Digitalmars-d mailing list