Advertisement
Guest User

Untitled

a guest
May 1st, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.39 KB | None | 0 0
  1. module z;
  2.  
  3. import std.stdio;
  4. import std.concurrency;
  5. import core.thread;
  6. import std.variant;
  7.  
  8. private struct Exit{};
  9. private struct supervisorAnswer {
  10.     Variant ret;
  11. }
  12.  
  13. private __gshared Tid supervisorTid;
  14.  
  15. private void supervisor() {
  16.     static Variant[string] zval;
  17.     bool done = false;
  18.     void _store(T)(string k, T v) {
  19.         assert(k.length > 0);
  20.         zval[k] = v;
  21.     }
  22.  
  23.     void _get(Tid id, string k) {
  24.         id.send(supervisorAnswer(zval.get(k, Variant("NOTFOUND"))));
  25.     }
  26.  
  27.     while (!done) {
  28.         supervisorAnswer answer;
  29.         receive(
  30.             (Exit s) { done = true; },
  31.             &_store!long,
  32.             &_store!ulong,
  33.             &_store!int,
  34.             &_store!uint,
  35.             &_store!float,
  36.             &_store!double,
  37.             &_store!string,
  38.             &_store!Variant,
  39.             &_get,
  40.             (Variant e) {  writeln(e); },
  41.         );
  42.     }
  43. }
  44.  
  45. Variant Get(const string s) {
  46.     Variant r;
  47.     supervisorTid.send(thisTid, s);
  48. writeln("TUQLUE");
  49.     receive(
  50.         (supervisorAnswer a) => r = a.ret
  51.     );
  52. writeln("42");
  53.     return r;
  54. }
  55.  
  56. void Set(T)(const string s, T v) {
  57.     supervisorTid.send(s, v);
  58. }
  59.  
  60. shared static this() {
  61.     supervisorTid = spawn(&supervisor);
  62. }
  63.  
  64. shared static ~this() {
  65.     send(supervisorTid, Exit());
  66. }
  67.  
  68. void main() {
  69.     Set("1", 11);
  70.     writeln(Get("1"));
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement