/usr/share/ada/adainclude/gnatcoll/gnatcoll-ravenscar-sporadic_server_with_callback.ads is in libgnatcoll16.1.0-dev 17.0.2017-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | ------------------------------------------------------------------------------
-- --
-- G N A T C O L L --
-- --
-- Copyright (C) 2008-2017, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 2, or (at your option) any later ver- --
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-- for more details. You should have received a copy of the GNU General --
-- Public License distributed with GNAT; see file COPYING. If not, write --
-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
-- Boston, MA 02110-1301, USA. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
-- Ravenscar tasks always communicate via messages or shared resources. It is
-- thus not possible to have a deferred operation (an operation executed by a
-- dedicated task) which carries OUT parameters. This archetype shows a
-- solution to this expressive limit by extending
-- GNAT.Ravenscar.Sporadic_Server. Clients release the server passing IN
-- parameters and a pointer to a procedure: the latter is automatically
-- called passing the computed value of OUT parameters of the deferred
-- operation executed by the sporadic server.
--
-- A tipical example of usage is the following:
--
-- type IN_Param is ...
-- type OUT_Param is ...
-- procedure Sporadic_Operation(In_P : IN_Param; OUT_P : out OUT_Param);
-- procedure CallBack (P : OUT_Param);
-- package My_Sporadic_Server is
-- new GNATCOLL.Ravenscar.Sporadic_Server_With_Callback
-- Task_Priority => 10,
-- Minimum_Interelease_Time => 1_000,
-- Protocol_Ceiling => 15,
-- System_Start_Time => System_Properties.Start_UP_Time,
-- QS => 4,
-- IN_Param_Type => IN_Param,
-- OUT_Param_Type => IOUT_Param,
-- Sporadic_Operation => Sporadic_Operation);
--
-- [...]
-- declare
-- P : IN_Param;
-- begin
-- -- Release the task --
-- My_Sporadic_Server.Put_Request(P, Callback'access);
--
-- BEHAVIOUR:
-- My_Sporadic_Server executes Sporadic_Operation and Callback passing as
-- parameters the values computed by Sporadic_Operation.
--
-- Additional explanations for GNAT.Ravenscar.Sporadic_Server still hold.
with System;
with Ada.Real_Time;
with GNATCOLL.Ravenscar.Sporadic_Server;
generic
Task_Priority : System.Priority;
-- the task priority
Minimum_Interelease_Time : Millisecond;
-- the minimum time between two consecutive releases
System_Start_Time : Ada.Real_Time.Time := Ada.Real_Time.Clock;
-- the system-wide release instant
Protocol_Ceiling : System.Any_Priority;
-- the ceiling priority of the protected object used to post and fetch
-- requests
QS : Queue_Size;
-- the maximum amount of saved requests
type In_Param is private;
-- the descriptor of IN parameters
type Out_Param is private;
-- the descriptor of OUT parameters
with procedure Sporadic_Operation
(In_Par : In_Param;
Out_par : out Out_Param);
-- the nominal operation
package GNATCOLL.Ravenscar.Sporadic_Server_With_Callback is
type Callback is access procedure (Out_Par : Out_Param);
-- the type of the callback
procedure Put_Request
(In_Par : In_Param;
CB : Callback);
-- invoked by clients to put requests (and corresponding callback)
private
type Queue_Item is record
In_Par : In_Param;
CB : Callback;
end record;
-- a reifed request descriptor containing IN parameters and callback
procedure Dispatch (Req : Queue_Item);
-- the dispatch procedure first executes the posted request and then
-- the callback
package My_Sporadic_Task is new GNATCOLL.Ravenscar.Sporadic_Server
(Task_Priority,
Minimum_Interelease_Time,
System_Start_Time,
Protocol_Ceiling,
QS,
Queue_Item,
Dispatch);
-- a sporadic server to execute reqeusts
end GNATCOLL.Ravenscar.Sporadic_Server_With_Callback;
|