On Thursday, 17 April 2014 at 00:55:19 UTC, Dicebot wrote:
Just in case, the key line to pay attention to in that example is this one:

CellIndex[0] c_;

It is a commonly used C idiom for dynamically sized structures that D also supports.

Absolutely. However, from a technical point of view, it doesn't make the structure "dynamically sized". It is only a hack to access data past the end of the struct.

You still have to manually and dynamically allocate the struct:
auto p = cast(State*)malloc(blockSize * stateSize);

And accessing data is done via .ptr, to avoid out of bounds.

    CellIndex get(in size_t i) inout pure nothrow {
        return c_.ptr[i];
    }

Reply via email to