Files @ d9774c9084d7
Branch filter:

Location: CSY/reowolf/testdata/parser/positive/2.pdl

Christopher Esterhuyse
more logging, testing, examples and bugfixes: (1) components remember whether they have submitted a solution; only those are considered when selecting a branch at the end of a round, (2) retrying active connections during setup phase were using the wrong index for looking up their TODO structure, (3) recently failed connections are deregistered from mio and reregistered after the retry process restarts s.t. they don't produce a storm of mio events
#version 100

import std.reo;

composite main(in asend, out arecv, in bsend, out brecv, in csend, out crecv) {
    channel xo -> xi;
    channel yo -> yi;
    channel zo -> zi;
    // Every synchronous round, at most one message is sent (to determine a global order)
    new mymerger(asend, bsend, xo);
    new mymerger(csend, xi, yo);
    // If a message is sent, it is broadcast to every recipient
    new replicator(yi, {arecv, zo});
    new replicator(zi, {brecv, crecv});
}

primitive mymerger(in a, in b, out c) {
    while (true) {
        synchronous {
            if (fires(a) && !fires(b) && fires(c)) {
                put(c, get(a));
            } else if (!fires(a) && fires(b) && fires(c)) {
                put(c, get(b));
            } else {
            	assert !fires(a) && !fires(b) && !fires(c);
            }
        }
    }
}