On Tuesday, 17 May 2016 at 18:25:46 UTC, ag0aep6g wrote:
On 05/17/2016 07:43 PM, Alex wrote:
The relation is: some object A contains the pointer/iota/(if at all)
some object B makes slices of the thing, which is in A.

Ok, so you have some object that stores a void pointer. The pointer is going to be null at all times. Then you slice that pointer. Is that right?
Yes.

In code:
----
class C
{
    void* ptr = null; /* always going to stay null */
    void[] getSlice(size_t a, size_t b) { return ptr[a .. b]; }
}

void main()
{
    auto c = new C;
    void[] slice1 = c.getSlice(5, 10);
    void[] slice2 = c.getSlice(7, 21);
}
----

Now you see a relation/dependency between slice1 and slice2, because the pointer they slice is the same, and it's stored in the same C object, right?
Yes.

But when slicing a pointer what matters is the value of the pointer, not where it resides. Where the pointer is stored is completely irrelevant. Like when adding two ints it doesn't matter where they came from; only their values matter.

Calling getSlice(5, 10) on two different C objects will return the exactly same slice (as long as ptr stays null):

Yes. This is the point where my error in reasoning resides...

----
/* ... class C as above ... */

void main()
{
    auto c1 = new C;
    auto c2 = new C;
    assert(c1 !is c2); /* not the same object */
assert(c1.getSlice(5, 10) is c2.getSlice(5, 10)); /* but the exact same slice */
}
----

There is no relationship between the slices or between a slice and the object that created it. You can have a free function that returns the exact same slices again:

----
/* ... class C as above */

void[] freeGetSlice(size_t a, size_t b)
{
    void* ptr = null;
    return ptr[a .. b];
}

void main()
{
    auto c = new C;
    assert(c.getSlice(5, 10) is freeGetSlice(5, 10));
}
----
Yeah... now I see this...

A note on iota: If you use iota instead, you don't need to store the result in the object either. You can call iota on the spot just like you call getSlice.

Thanks for disillusioning :)

Reply via email to