public Transporter(IConnector connector, Ticker ticker, int length, Rate rate, int speed) { this.connector = connector; this.length = length; this.rate = rate; this.speed = speed; this.ticker = ticker; if (!(connector.Downstream is IProcessor p)) { throw new Exception("transporter must connect a downstream IProcessor"); } filter = p.Filter; if (!(connector.Upstream is IBuffer i) || !(connector.Downstream is IBuffer o)) { throw new Exception("transporter input and output must both be IBuffer"); } input = i; output = o; ticker.Tick += Tick; connector.Deleted += Deleted; }
public Processor(IProcess p, Ticker t, int maxUpstream, int maxDownstream) : base(new Node(maxUpstream, maxDownstream), t, p.Filter, p.Rate) { input = new Buffer(); process = p; }
public Source(Shape shape, Rate r, Ticker t, int maxDownstream) : base(new Node(0, maxDownstream), t, Filter.AllowAll(), r) { this.shape = shape; }
public Sink(Score score, Filter f, Rate r, Ticker t, int maxUpstream) : base(new Node(maxUpstream, 0), t, f, r) { score.RegisterSink(this); }