Семейства входов

Используя описание семейства входов можно одним выражением языка описать целое множество входов задачи. Каждый вход из семейства входов имеет одинаковый набор параметров. В момент рандеву, для указания конкретного входа, используется индекс из заданного диапазона.

--  Family of entries usage example.
--  Author: Dmitriy Anisimkov.
--  License: GPL

with Ada.Text_IO;

procedure Entry_Family is

   task type Task_Type (Length : Positive) is
      entry Call (Positive range 1 .. Length) (Data : String);
   end Task_Type;

   task body Task_Type is
   begin
      for J in 1 .. Length loop
         accept Call (J) (Data : String) do
            Ada.Text_IO.Put_Line (Data);
         end Call;

         delay 0.125;
      end loop;
   end Task_Type;

   Task_Object : Task_Type (8);

begin
   for J in reverse 1 .. Task_Object.Length loop
      select
         Task_Object.Call (J) (Integer'Image (J));
      or delay 0.25;
         Ada.Text_IO.Put_Line (Integer'Image (J) & " Timeout");
      end select;
   end loop;

   for J in 2 .. Task_Object.Length loop
      Task_Object.Call (J) (Integer'Image (J));
   end loop;
end Entry_Family;