Consume from the Disruptor. Calls del with the slice of produced but not consumed elements. The argument firstIndex is the index of the first element in slice.
Generate a new consumer token.
import std.functional : toDelegate; alias D = Disruptor!int; int testInt = ubyte.max; auto doNothing = (int[] values, ulong idx) { if (!values.empty) testInt = values[0]; }; shared D d; ConsumerToken consumer1 = d.createConsumerToken(); ConsumerToken consumer2 = d.createConsumerToken(); assert (!d.consume(consumer1, doNothing)); assert (!d.consume(consumer2, doNothing)); d.produce((ref int v, ulong _) { v = 1; }.toDelegate()); assert (d.consume(consumer1, doNothing)); assert (testInt == 1); assert (!d.consume(consumer1, doNothing)); testInt = 2; assert (d.consume(consumer2, doNothing)); assert (testInt == 1); assert (!d.consume(consumer2, doNothing));
import std.functional : toDelegate; alias D = Disruptor!int; int testInt = ubyte.max; auto doNothing = (int[] values, ulong idx) { if (!values.empty) testInt = values[0]; }; shared D d; ConsumerToken consumer1 = d.createConsumerToken(); ConsumerToken consumer2 = d.createConsumerToken(); consumer2.waitFor(consumer1); assert (!d.consume(consumer1, doNothing)); assert (!d.consume(consumer2, doNothing)); d.produce((ref int v, ulong _) { v = 1; }.toDelegate()); testInt = ubyte.max; assert (!d.consume(consumer2, doNothing)); assert (testInt == ubyte.max); assert (d.consume(consumer1, doNothing)); assert (testInt == 1); assert (!d.consume(consumer1, doNothing)); assert (d.consume(consumer2, doNothing));
A single-producer, multiple consumer disruptor implementation