on structs by reference
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Nov 15 23:51:53 PST 2015
On 11/14/2015 07:53 AM, Alex wrote:
> 3. The only point I stumble on is, that the main feature in my program
> is, that the underlying array, to which my slices refer to never
> changes. So, I'm going to have more and more slices, which are going to
> be smaller and smaller and each points to the same underlying array
> without overlapping, but at each step, there are as much copies of a
> single slice as elements it points to. I hope this last point was not
> too weird.
Your struct objects must keep a reference to the slice that they use
(i.e. one ore level of indirection).
Here is a start:
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]
Ali
More information about the Digitalmars-d-learn
mailing list