Is it possible to modify shared struct array in a function.
Jerry
labuurii at gmail.com
Fri Feb 8 06:55:15 UTC 2019
On Friday, 8 February 2019 at 04:51:08 UTC, Sudhi wrote:
> On Friday, 8 February 2019 at 04:30:23 UTC, Arun Chandrasekaran
> wrote:
>> On Friday, 8 February 2019 at 04:13:39 UTC, Sudhi wrote:
>>> [...]
>>
>> Works fine for me with DMD64 D Compiler v2.083.1.
>> https://run.dlang.io/is/RRM8GU
>
>
> My example code was wrong. Below is the right one.
>
> struct Company
> {
> string name;
> string location;
> }
>
> struct Racks
> {
> int number;
> int location;
> }
>
> struct Metadata
> {
> string name;
> Company[] companies;
> Racks[] racks;
> }
>
> struct Item
> {
> Metadata[] met;
> int count;
> }
>
> shared (Item) item;
>
> void main()
> {
> updateMetadata();
> }
>
> void updateMetadata()
> {
> Company company;
> company.name = "Hello";
> company.location = "Bangalore";
> item.met.companies ~= company;
> import std.stdio: writeln;
> writeln(item);
> }
>
> https://run.dlang.io/is/iem0PY
You have to cast away shared:
auto loc_item = cast(Item) item;
loc_item.met ~= m;
item = cast(shared) loc_item;
Just to be clear, this is not threadsafe and require a mutex if
you do this other than as init in main.
More information about the Digitalmars-d-learn
mailing list