Previous: Component Imperative Statements, Up: Components [Contents][Index]
A component is not limited to a single provides port, it is allowed to
offer multiple interfaces simultaneously. When a component provides
multiple ports it can receive in
-events via any of its provides
ports. As a result the interface behaviors of the provides ports are
effectively interleaved and the component is expected to handle that
appropriately.
When providing multiple ports, two restrictions hold for the component behavior:
V-fork
Within the handling of an in
-event of a provides port, it is not
allowed to directly post an out
-event on another provides port.
Y-fork
Within the handling of an out
-event of a requires port, it is not
allowed to post an out
-event to more than one provides port.
The rationale behind both limitations is that if V-forking or Y-forking would be allowed that it potentially leads to behavior which is beyond the scope of single component verification.
Violating of any of these restrictions is reported as a compliance error.
Here are examples of the two types of forking that lead to a compliance error:
interface ihello { in void hello(); out void world(); behavior { on hello: {} on optional: world; } } component v_fork { provides ihello left; provides ihello right; behavior { on left.hello(): { right.world(); //is non-compliant with interface(s) of provides port(s) } on right.hello(): {} } } component y_fork { provides ihello left; provides ihello right; requires ihello r; behavior { on left.hello(), right.hello(): {} on r.world(): { left.world(); right.world(); //is non-compliant with interface(s) of provides port(s) } } }