rxada_0.1.0_6ff779c7/src/priv/rx-dispatchers.ads

 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
with Ada.Calendar;

with Rx.Errors;
with Rx.Impl.Shared_Observer;
with Rx.Impl.Preservers;
with Rx.Impl.Typed;

package Rx.Dispatchers is

   pragma Elaborate_Body;

   type Dispatcher is limited interface;

   type Runnable is interface;

   procedure Run (This : Runnable) is abstract;

   --  Schedule a code to be run at a certain time, in a certain scheduler (thread)
   procedure Schedule (Where : in out Dispatcher;
                       What  : Runnable'Class;
                       Time  : Ada.Calendar.Time := Ada.Calendar.Clock) is abstract;

   generic
      with package Typed is new Rx.Impl.Typed (<>);
   package Events is

      package Shared is new Rx.Impl.Shared_Observer (Typed);

      procedure On_Next      (Sched : in out Dispatcher'Class; Observer : Shared.Observer; V : Typed.Type_Traits.T);
      procedure On_Complete  (Sched : in out Dispatcher'Class; Observer : Shared.Observer);
      procedure On_Error     (Sched : in out Dispatcher'Class; Observer : Shared.Observer; E : Rx.Errors.Occurrence);

   end Events;

   generic
      with package Operate is new Rx.Impl.Preservers (<>);
   package Subscribe is

      procedure On_Subscribe (Sched  : in out Dispatcher'Class;
                              Parent :        Operate.Observable'Class;
                              Child  :        Operate.Into.Observer'Class);

   end Subscribe;

   procedure Shutdown;
   --  Signal schedulers to exit.
   --  Necessary when there are infinite sequences going on (e.g. Interval)

   function Terminating return Boolean;
   --  Will be true after shutdown has been invoked

end Rx.Dispatchers;