Proposal to make "shared" (more) useful
Arafel
er.krali at gmail.com
Thu Sep 13 15:38:36 UTC 2018
On 09/13/2018 05:16 PM, Kagamin wrote:
> struct Unshared(T)
> {
> private T value;
> T get() shared { return cast(T)value; }
> alias get this;
> void opAssign(T v) shared { value=cast(shared)v; }
> }
>
> shared synchronized class A
> {
> private Unshared!(int[]) a;
> int[] f()
> {
> return a;
> }
> }
>
My current attempt, still work in progress:
```
import std.stdio;
import std.datetime.systime;
shared struct GShared(T) {
ubyte[T.sizeof] payload;
this(T t) {
*(cast(T*) &payload) = t;
}
this(shared T t) {
*(cast(T*) &payload) = cast() t;
}
void opAssign(T t) {
*(cast(T*) &payload) = t;
}
void opAssign(shared T t) {
*(cast(T*) &payload) = cast() t;
}
ref T data() {
return *(cast(T*) &payload);
}
alias data this;
}
shared synchronized class A {
this() {
t = Clock.currTime;
}
void printIt() {
writeln(t);
}
private:
GShared!SysTime t;
}
void main() {
shared A a = new shared A;
a.printIt;
}
```
More information about the Digitalmars-d
mailing list