Next: Cannot bind wildcard to requires
port, Previous: Cannot bind two wildcards, Up: Well-formedness – System [Contents][Index]
instance
in in a cyclic bindingWe can define communication “direction” for bindings as follows:
requires
port directs to
the provides
port in the binding.
provides
external port directs to
a component instance provides
port, and a component instance
requires
directs to a requires
external port.
To prevent component re-entrancy and guarantee run-to-completion semantics, cycles in ’directed’ communication are not allowed within a system component.
In the most trivial example, which creates a one-component cycle:
interface ihello { in void hello (); behavior {on hello:{}} } component hello { provides ihello p; requires ihello r; behavior {} } component binding_cycle { system { hello h; h.p <=> h.r; } }
This results in the following error messages:
binding-cycle.dzn:18:5: error: instance `h' is in a cyclic binding
A more elaborate example creates a cycle over three components:
interface ihello { in void hello (); behavior {on hello:{}} } component hello { provides ihello p; requires ihello r; behavior {} } component world { provides ihello p_left; provides ihello p_right; requires ihello r_left; requires ihello r_right; behavior {} } component binding_cycle { provides ihello p_left; provides ihello p_right; requires ihello r_left; requires ihello r_right; system { hello h1; hello h2; world w1; world w2; p_left <=> w1.p_left; p_right <=> w2.p_left; w1.r_left <=> h1.p; w1.r_right <=> h2.p; w2.r_left <=> w1.p_right; w2.r_right <=> r_right; h1.r <=> r_left; h2.r <=> w2.p_right; } }
This results in the following error message:
binding-cycle-elaborate.dzn:32:5: error: instance `h2' is in a cyclic binding binding-cycle-elaborate.dzn:33:5: error: instance `w1' is in a cyclic binding binding-cycle-elaborate.dzn:34:5: error: instance `w2' is in a cyclic binding
Next: Cannot bind wildcard to requires
port, Previous: Cannot bind two wildcards, Up: Well-formedness – System [Contents][Index]