| Thread overview | |||||
|---|---|---|---|---|---|
|
February 18, 2015 Avoiding Range Postblits | ||||
|---|---|---|---|---|
| ||||
At https://github.com/nordlow/justd/blob/master/knet/association.d#L59 I'm constructing an array of ranges that are used further down in the function contextOf. The expression nds.map!(nd => gr.dijkstraWalker(nd, ...)).array; however triggers postblits for the range DijkstraWalker returned by the instantiator dijkstraWalker. Can this be avoided somehow? I'm guessing that move construction plays a key role here. Note that I can't remove the .array as they required to be l-values because their iteration to have side-effects at the end of the function contextOf(). | ||||
February 18, 2015 Re: Avoiding Range Postblits | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Nordlöw Attachments: | On Wed, 18 Feb 2015 22:51:17 +0000, Nordlöw wrote:
> Can this be avoided somehow?
i don't think so. you can use heap-allocated structs, of course, or maybe `RefCounted!` can do the trick, but i not tried it.
| |||
February 18, 2015 Re: Avoiding Range Postblits | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On 02/18/2015 02:51 PM, "Nordlöw" wrote:
> I'm guessing that move construction plays a key role here.
move() does avoid the post-blit but you get many destructions in return:
import std.stdio;
import std.algorithm;
import core.memory;
struct Graph
{}
struct DW
{
int i;
this(int i)
{
writefln(" this() for %s", i);
this.i = i;
}
~this()
{
writefln("~this() for %s", i);
}
this(this)
{
writefln("this(this) for %s", i);
assert(false, "Oops");
}
}
DW dw(Graph gr, int i)
{
return DW(i);
}
void main()
{
auto gr = Graph();
auto arr = [ 1, 2, 3 ];
auto dws = new DW[arr.length];
foreach (i, el; arr) {
auto source = gr.dw(el);
move(source, dws[i]);
}
writeln(dws);
}
The output:
this() for 1
~this() for 0
~this() for 0
this() for 2
~this() for 0
~this() for 0
this() for 3
~this() for 0
~this() for 0
[DW(1), DW(2), DW(3)]
~this() for 3
~this() for 2
~this() for 1
Ali
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply