On Monday, 16 November 2015 at 07:51:53 UTC, Ali Çehreli wrote:

import std.stdio;

/* This is the storage to the slices that objects will share.
 *
* (Surprisingly, creating a slice dynamically is not possible due
 * to syntax issues: new int[N] means "allocates N ints and make
 * a slice from those." However, we need a dynamic slice object
* here. I've decided to put the slices in a 'slice slice' here.)
 */
int[][] slices;

struct S
{
    size_t idx;

    ref int[] arr()
    {
        return slices[idx];
    }
}

void main()
{
    S s; // = new S();
    slices ~= [1,2,3];
    s.idx = slices.length - 1;
    writeln(s.arr); //first

    S t; // = new S();
    t = s;
    writeln(t.arr); //second

    s.arr ~= 4;
    writeln(s.arr); //third
    writeln(t.arr);
}

[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]


Ok, this definitely helps. Thank you!
For me, the key point here is, that my struct S, which use one of the slices in the Slice of slices does not own it. This is ok. So, I have to think about who owns the Slice of slices now, because only this 'something' should be able to rearrange its data... The cool thing is, that it will be able to modify the data THROUGH the s structs, as in the line
s.arr ~= 4;
and is not restricted to. So, new S structs are generated by operating on the Slice of slices directly and old slices can be modified by operating on the appropriate S struct.
Thanks again for helping zooming out...

Reply via email to