| -- { dg-do compile } |
| -- { dg-options "-gnateF" } |
| |
| PACKAGE BODY Entry1 IS |
| |
| PROTECTED TYPE key_buffer IS |
| |
| PROCEDURE clear; |
| |
| ENTRY incr; |
| ENTRY put (val : IN Natural); |
| ENTRY get (val : OUT Natural); |
| |
| PRIVATE |
| |
| -- Stores Key states (key state controller) |
| -- purpose: exclusive access |
| max_len : Natural := 10; |
| |
| cnt : Natural := 0; |
| |
| END key_buffer; |
| |
| PROTECTED BODY key_buffer IS |
| |
| PROCEDURE clear IS |
| BEGIN |
| cnt := 0; |
| END clear; |
| |
| ENTRY incr WHEN cnt < max_len IS |
| BEGIN |
| cnt := cnt + 1; |
| END; |
| |
| ENTRY put (val : IN Natural) WHEN cnt < max_len IS |
| BEGIN |
| cnt := val; |
| END put; |
| |
| ENTRY get (val : OUT Natural) WHEN cnt > 0 IS |
| BEGIN |
| val := cnt; |
| END get; |
| |
| END key_buffer; |
| |
| my_buffer : key_buffer; |
| |
| FUNCTION pt2 (t : IN Float) RETURN Natural IS |
| c : Natural; |
| t2 : duration := duration (t); |
| BEGIN |
| SELECT |
| my_buffer.get (c); |
| RETURN c; |
| OR |
| DELAY t2; |
| RETURN 0; |
| END SELECT; |
| END pt2; |
| |
| FUNCTION pt (t : IN Float) RETURN Natural IS |
| c : Natural; |
| BEGIN |
| SELECT |
| my_buffer.get (c); |
| RETURN c; |
| OR |
| DELAY Duration (t); |
| RETURN 0; |
| END SELECT; |
| END pt; |
| |
| END Entry1; |