public GraphInterpreter(
GraphAssembly assembly,
IMaterializer materializer,
ILoggingAdapter log,
IInHandler[] inHandlers,
IOutHandler[] outHandlers,
GraphStageLogic[] logics,
Action<GraphStageLogic, object, Action<object>> onAsyncInput,
bool fuzzingMode)
{
Logics = logics;
Assembly = assembly;
Materializer = materializer;
Log = log;
InHandlers = inHandlers;
OutHandlers = outHandlers;
OnAsyncInput = onAsyncInput;
FuzzingMode = fuzzingMode;
ConnectionSlots = new object[assembly.ConnectionCount];
for (var i = 0; i < ConnectionSlots.Length; i++)
ConnectionSlots[i] = Empty.Instance;
PortStates = new int[assembly.ConnectionCount];
for (var i = 0; i < PortStates.Length; i++)
PortStates[i] = InReady;
RunningStagesCount = Assembly.Stages.Length;
_shutdownCounter = new int[assembly.Stages.Length];
for (var i = 0; i < _shutdownCounter.Length; i++)
{
var shape = assembly.Stages[i].Shape;
_shutdownCounter[i] = shape.Inlets.Count() + shape.Outlets.Count();
}
_eventQueue = new int[1 << (32 - (assembly.ConnectionCount - 1).NumberOfLeadingZeros())];
_mask = _eventQueue.Length - 1;
}