// reply_reorder: p.start r.ping r.pong r.pong r.return p.busy p.finish p.return // interface Provides // { // in void start(); // out void busy(); // out void finish(); // behaviour // { // enum State {Idle, Busy, Finishing}; // State s = State.Idle; // [s.Idle] // { // on start: s = State.Busy; // } // [s.Busy] // { // [true] // { // on start: illegal; // on inevitable: busy; // } // [true] // { // on start: illegal; // on inevitable: { busy; s = State.Finishing; } // } // } // [s.Finishing] // { // on start: illegal; // on inevitable: { finish; s = State.Idle; } // } // } // } interface Provides { in void start(); out void busy(); out void finish(); behaviour { on start: { busy; finish; } } } interface Requires { in void ping(); out void pong(); behaviour { on ping: { pong; pong; } } } component reply_reorder { provides Provides p; requires Requires r; behaviour { bool first = true; on p.start(): { r.ping(); } on r.pong(): { [first] { p.busy(); first = !first; } [!first] { p.finish(); first = !first; } } } }