Linked variables

Baz via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 14 05:31:13 PDT 2015


On Monday, 13 July 2015 at 22:07:11 UTC, Tanel Tagaväli wrote:
> Does the standard library have a way to create a forward link 
> between two variables of the same type?
> One variable is the source and the other is the sink.
> When the source variable is changed, the sink variable is too.
> Changing the sink variable has no effect on the source variable.
>
> I have already implemented it using std.signals and class 
> templates(https://github.com/TheBlu/lockd/blob/master/source/engine.d), but is there a better way, either in the standard library or a third party library?

I have done a data binding system using properties in my D 
learning library.

(https://github.com/BBasile/iz/blob/master/import/iz/properties.d#L610)

The problem encountered with data binding is that there must be a 
signal.
So the most obvious way to do that is always more or less based 
on the observer pattern.

But there are other solutions:
- check a list of pointer in a thread or in a timer. (foreach 
target in targets...if target != source... ; Thread.sleep();)
- check a list of pointer when a particular message is found 
within a message queue.
(if messages.peek == msg.synchronize_bindings then foreach target 
in targets...)
- similarly, check the target "on idle", for example on windows 
when no message is dispatched then an idleEvent can be defined. 
This solution works fine with GUI programs.

A very D-ish way to do that would be to use UDA annotations to 
build the list of targets.


More information about the Digitalmars-d-learn mailing list