sort
#x:action-sort
#x:modeling-sort
#x:enum-sort
#x:reply-sort
#x:event-sort

provides_ports = struct no_port?no_port_is#x:provides-port-construct;

requires_ports = struct no_requires #x:requires-port-construct;

reply_values = struct replies (#x:reply-values);

act
#x:event-act
#x:makreel:model-name end;
#x:makreel:model-name end';
#x:makreel:model-name other_end;
#x:makreel:model-name other_end';
queue_full;
queue_empty;
queue_empty';
queue_not_empty;
queue_not_empty';

%%%%%%%%%%%%%%%%% INTERFACE %%%%%%%%%%%%%%%%%

#x:interface-proc-memo

%%%%%%%%%%%%%% PORT PROCESSES %%%%%%%%%%%%%%%

#x:interface-action-proc

%%%%%%%%%%%%%%%%%%%%%%% PROVIDES %%%%%%%%%%%%%%%%%%%%%%%%%%

proc
provides_r2c(ports: Set(provides_ports))
 = #x:provides-r2c-proc #x:provides-r2c-blocking-proc
 ;

provides_out(ports: Set(provides_ports))
 = #x:provides-out
 ;

provides_parallel = #x:provides-port-parallel-proc || provides_r2c({});

provides_comm = comm ({
#x:provides-comm
 }, provides_parallel);

provides_allow = allow ({
   declarative_illegal
 , illegal
 , missing_reply
 , range_error
 , second_reply
 , tag
 , tau_void
#x:provides-interface-allow
#x:provides-allow
 }, provides_comm);

provides_rename = rename ({
#x:provides-rename
 }, provides_allow);

provides = hide ({
   tau_void
 , #x:allow-tau
 }, provides_rename);

#x:component
