Is it possible to modify shared struct array in a function.

Sudhi sudheendra.malli at gmail.com
Fri Feb 8 04:51:08 UTC 2019


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:
>> I have a situation, where i want to modify a shared variable 
>> in a function. Something like below
>>
>> 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;
>> }
>>
>> Compiler throws me error in last line for appending as below.
>>
>> "cannot append type Metadata to type shared(Metadata[])".
>>
>> Please let me know if there is a way to acheive this.
>>
>> Thanks,
>> Sudhi
>
> 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



More information about the Digitalmars-d-learn mailing list