acto_rs/
lib.rs

1extern crate lossyq;
2extern crate libc;
3
4pub mod scheduler;
5pub mod elem;
6
7// re-exports
8pub use lossyq::spsc::{Sender,Receiver};
9pub use elem::{source, sink, filter, scatter, gather, ymerge, ysplit, connectable};
10pub use scheduler::Scheduler;
11
12#[derive(Copy, Clone, Debug)]
13pub enum ChannelState {
14  ReceiverNotConnected,
15  ConnectedReceiver,
16  SenderNotConnected,
17  ConnectedSender,
18}
19
20#[derive(Copy, Clone, Debug)]
21pub struct ExpectedChannelState (pub ChannelState);
22
23#[derive(Copy, Clone, Debug)]
24pub struct ActualChannelState (pub ChannelState);
25
26#[derive(Copy, Clone, Debug)]
27pub enum Error {
28  Busy,
29  NonExistent,
30  Stopping,
31  AlreadyExists,
32  InvalidChannelState(ExpectedChannelState, ActualChannelState)
33}
34
35#[derive(Copy,Clone,Debug,PartialEq,Eq)]
36pub struct InclusiveMessageRange {
37  pub from: usize,
38  pub to:   usize,
39}
40
41#[derive(Copy,Clone,Debug,PartialEq,Eq)]
42pub struct ChannelPosition (pub usize);
43
44#[derive(Copy, Clone,Debug)]
45pub enum Message<ValueType: Send, ErrorType: Send> {
46  Value(ValueType),
47  Ack(InclusiveMessageRange),
48  Error(ChannelPosition, ErrorType),
49}
50
51#[derive(Copy,Clone,Debug,PartialEq,Eq)]
52pub struct SenderChannelId (pub usize);
53
54#[derive(Copy,Clone,Debug,PartialEq,Eq)]
55pub struct ReceiverChannelId (pub usize);
56
57#[derive(Copy,Clone,Debug,PartialEq,Eq)]
58pub struct ChannelId {
59  pub sender_id:    SenderChannelId,
60  pub receiver_id:  ReceiverChannelId,
61}
62
63#[derive(Copy,Clone,Debug,PartialEq,Eq)]
64pub struct PeriodLengthInUsec (pub usize);
65
66#[derive(Copy,Clone,Debug)]
67pub enum SchedulingRule {
68  Loop,
69  OnMessage,
70  Periodic(PeriodLengthInUsec),
71  OnExternalEvent,
72}
73
74#[derive(Copy,Clone,Debug,PartialEq,Eq,Hash)]
75pub struct TaskId (usize);
76
77
78#[derive(Clone,Debug,PartialEq,Eq)]
79pub struct SenderName (pub String);
80
81#[derive(Clone,Debug,PartialEq,Eq)]
82pub struct ReceiverName (pub String);
83
84pub trait Task {
85  fn execute(&mut self, stop: &mut bool);
86  fn name(&self) -> &String;
87  fn input_count(&self) -> usize;
88  fn output_count(&self) -> usize;
89  fn input_id(&self, ch_id: ReceiverChannelId) -> Option<(ChannelId, SenderName)>;
90  fn input_channel_pos(&self, ch_id: ReceiverChannelId) -> ChannelPosition;
91  fn output_channel_pos(&self, ch_id: SenderChannelId) -> ChannelPosition;
92}
93
94pub enum ChannelWrapper<Value: Send, Error: Send> {
95  ReceiverNotConnected(ReceiverChannelId, ReceiverName),
96  ConnectedReceiver(ChannelId, Receiver<Message<Value, Error>>, SenderName),
97  SenderNotConnected(SenderChannelId, Receiver<Message<Value, Error>>, SenderName),
98  ConnectedSender(ChannelId, ReceiverName),
99}
100
101#[cfg(test)]
102pub mod tests;
103
104#[cfg(any(test, feature = "bench"))]
105pub mod sample;
106
107#[cfg(any(test, feature = "bench"))]
108pub mod bench;