On Tuesday, 5 September 2017 at 14:55:21 UTC, Void-995 wrote:

Using unions? <Type>Count and <Type>Offset are different depending on input data, so the address where they are is varying depending on which file I've loaded. Or I didn't get what you meant.
Yes, so you need separate union type for every type of input data. But these values are known in compile time, so you can do mixin, creating the union for each type like this:

union MyBinaryStructA
{
    ubyte[...] asBytes;
    struct asStruct
    {
        align(1):
        ubyte[...] dummy1; // padding before firstList
        MyBinarySubStructAForA[...] firstList;
        ubyte[...] dummy2; // padding between lists
        MyBinarySubStructBForA[...] secondList;
        ...
    }
}

unittest
{
    MyBinaryStructA a;

a.asBytes = someBinarySourceForA; // fill from unstructured source

auto item = a.asStruct.firstList[1]; // access to structure element
}

Reply via email to