Thread overview
looking for V[string] workarounds
Mar 20, 2013
Dan
Mar 20, 2013
Ali Çehreli
Mar 20, 2013
Dan
Mar 20, 2013
Ali Çehreli
Mar 20, 2013
Dan
March 20, 2013
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
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
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
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
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.