| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
March 20, 2013 looking for V[string] workarounds | ||||
|---|---|---|---|---|
| ||||
Can the following be made to build and run, but keep the intent of what is shown. I realize it touches on several bugs related to const, postblit, and map - but I'm having trouble finding the magic combination. The idea is simply have assets store multiple series of data in a map indexed by the asset name.
Thanks,
Dan
import std.stdio;
struct Series {
// REQUIRED - need to have no aliasing
this(this) { data = data.dup; }
private double[] data;
}
struct Assets {
this(this) { itemToSeries.dup; }
// REQUIRED - want ctor to dup arg to ensure no aliasing
this(const(Series[string]) source) {
itemToSeries = source.dup;
}
private Series[string] itemToSeries;
}
void main() {
auto data = [ "house" : Series([1,2,3.0])];
auto assets = Assets(data);
writeln(assets);
}
| ||||
March 20, 2013 Re: looking for V[string] workarounds | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Dan | On 03/20/2013 07:34 AM, Dan wrote: > Can the following be made to build and run, but keep the intent of what > is shown. I realize it touches on several bugs related to const, > postblit, and map - but I'm having trouble finding the magic > combination. The idea is simply have assets store multiple series of > data in a map indexed by the asset name. > > Thanks, > Dan > > import std.stdio; > struct Series { > // REQUIRED - need to have no aliasing > this(this) { data = data.dup; } > private double[] data; > } > > struct Assets { > this(this) { itemToSeries.dup; } > // REQUIRED - want ctor to dup arg to ensure no aliasing > this(const(Series[string]) source) { The code compiles with 2.062 and an earlier version of 2.063 if you accept letting go of const-correctness there: this(Series[string] source) { > itemToSeries = source.dup; > } > private Series[string] itemToSeries; > } > > void main() { > auto data = [ "house" : Series([1,2,3.0])]; > auto assets = Assets(data); > writeln(assets); > } Ali | |||
March 20, 2013 Re: looking for V[string] workarounds | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Wednesday, 20 March 2013 at 17:11:02 UTC, Ali Çehreli wrote:
> The code compiles with 2.062 and an earlier version of 2.063 if you accept letting go of const-correctness there:
>
> this(Series[string] source) {
>
Thanks Ali. But, removing const there then requires non-const instances to be passed in, due to const transitivity. So that requirement would ripple a change to all already const correct instances to now need to flip to non-const. I'm looking for a const correct solution. It should be doable ... I just have had no luck with it.
Thanks
Dan
| |||
March 20, 2013 Re: looking for V[string] workarounds | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Dan | On 03/20/2013 10:24 AM, Dan wrote:
> On Wednesday, 20 March 2013 at 17:11:02 UTC, Ali Çehreli wrote:
>> The code compiles with 2.062 and an earlier version of 2.063 if you
>> accept letting go of const-correctness there:
>>
>> this(Series[string] source) {
>>
>
> Thanks Ali. But, removing const there then requires non-const instances
> to be passed in, due to const transitivity. So that requirement would
> ripple a change to all already const correct instances to now need to
> flip to non-const. I'm looking for a const correct solution. It should
> be doable ... I just have had no luck with it.
In that case, brute force to the rescue (nc stands for non-const): :)
this(const(Series[string]) source) {
auto nc_source = cast(Series[string])source;
itemToSeries = nc_source.dup;
}
Ali
| |||
March 20, 2013 Re: looking for V[string] workarounds | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Wednesday, 20 March 2013 at 17:44:16 UTC, Ali Çehreli wrote:
> In that case, brute force to the rescue (nc stands for non-const): :)
>
> this(const(Series[string]) source) {
> auto nc_source = cast(Series[string])source;
> itemToSeries = nc_source.dup;
> }
Wow - that worked. Thanks! I hope it is safe.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply