www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Using TreeSet and __gshared values

reply "nrgyzer" <nrgyzer gmail.com> writes:
Hi guys,

I'm having some trouble using the treeset implementation of
Steven (dcollections) in conjunction with __gshared. When I do
the following:

class Entry
{
	int value;
	this(int v)
	{
		value = v;
	}
	int opCmp(Object o)
	{
		return -1;
	}
}

void main()
{

	auto tree = new TreeSet!Entry();
	tree.add(new Entry(10));
	tree.add(new Entry(20));
	tree.add(new Entry(30));

	foreach (ref entry; tree)
	{
		writeln(entry.value);
	}
}

I'm getting the following output:

10
20
30

But when I replace the class as follows:

class Entry
{
	__gshared int value;
	this(int v)
	{
		value = v;
	}
	int opCmp(Object o)
	{
		return -1;
	}
}

I'm getting the following output:

30
30
30

Do anyone have any ideas what can cause the problem?
Sep 03 2014
parent reply ketmar via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> writes:
On Wed, 03 Sep 2014 19:53:15 +0000
nrgyzer via Digitalmars-d-learn <digitalmars-d-learn puremagic.com>
wrote:

__gshared class members are effectively "static", i.e. they are "class
members", not "instance members".

i.e.

class Entry {
  __gshared int value;
  ...
  static int getValue () { return value; }
}

works ok.

you have only one 'value' variable for all your instances.
Sep 03 2014
parent reply "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> writes:
On Wednesday, 3 September 2014 at 20:10:51 UTC, ketmar via 
Digitalmars-d-learn wrote:
 On Wed, 03 Sep 2014 19:53:15 +0000
 nrgyzer via Digitalmars-d-learn 
 <digitalmars-d-learn puremagic.com>
 wrote:

 __gshared class members are effectively "static", i.e. they are 
 "class
 members", not "instance members".
Hmm... would be nice if there were a warning/error when __gshared is used without static in a class.
Sep 04 2014
parent reply ketmar via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> writes:
On Thu, 04 Sep 2014 08:38:50 +0000
via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:

 Hmm... would be nice if there were a warning/error when __gshared=20
 is used without static in a class.
would you fill enhancement request in bugzilla?
Sep 04 2014
parent "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> writes:
On Thursday, 4 September 2014 at 09:02:26 UTC, ketmar via 
Digitalmars-d-learn wrote:
 On Thu, 04 Sep 2014 08:38:50 +0000
 via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> 
 wrote:

 Hmm... would be nice if there were a warning/error when 
 __gshared is used without static in a class.
would you fill enhancement request in bugzilla?
https://issues.dlang.org/show_bug.cgi?id=13421
Sep 04 2014