예제 #1
0
 public ValueEventProcessorTests()
 {
     _ringBuffer      = new ValueRingBuffer <StubValueEvent>(() => new StubValueEvent(-1), 16);
     _sequenceBarrier = _ringBuffer.NewBarrier();
 }
예제 #2
0
 private static IValueEventProcessor <T> CreateEventProcessor <T>(IValueDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler)
     where T : struct
 {
     return(EventProcessorFactory.Create(dataProvider, sequenceBarrier, eventHandler));
 }
예제 #3
0
 public PartialEventProcessor(SequenceBarrier sequenceBarrier, TSequenceBarrier typedSequenceBarrier)
 {
     _sequenceBarrier      = sequenceBarrier;
     _typedSequenceBarrier = typedSequenceBarrier;
 }
예제 #4
0
 public RingBufferPublicationBenchmarks()
 {
     _ringBuffer      = new RingBuffer <Event>(() => new Event(), new SingleProducerSequencer(4096, new BusySpinWaitStrategy()));
     _sequenceBarrier = _ringBuffer.NewBarrier();
 }
예제 #5
0
 private static IEventProcessor <T> CreateEventProcessor <T>(IDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IBatchEventHandler <T> eventHandler)
     where T : class
 {
     return(EventProcessorFactory.Create(dataProvider, sequenceBarrier, eventHandler));
 }
예제 #6
0
 public BatchEventProcessorTests()
 {
     _ringBuffer      = new RingBuffer <StubEvent>(() => new StubEvent(-1), 16);
     _sequenceBarrier = _ringBuffer.NewBarrier();
 }
예제 #7
0
 /// <summary>
 /// Create a new <see cref="IEventProcessor{T}"/> with dedicated generic arguments.
 /// </summary>
 /// <typeparam name="T">the type of event used.</typeparam>
 /// <param name="dataProvider">dataProvider to which events are published</param>
 /// <param name="sequenceBarrier">SequenceBarrier on which it is waiting.</param>
 /// <param name="eventHandler">eventHandler is the delegate to which events are dispatched.</param>
 /// <returns></returns>
 public static IEventProcessor <T> Create <T>(IDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IBatchEventHandler <T> eventHandler)
     where T : class
 {
     return(Create(dataProvider, sequenceBarrier, eventHandler, typeof(BatchEventProcessor <, , ,>)));
 }
예제 #8
0
    internal static IValueEventProcessor <T> Create <T>(IValueDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler, Type processorType)
        where T : struct
    {
        var dataProviderProxy   = StructProxy.CreateProxyInstance(dataProvider);
        var sequencerOptions    = sequenceBarrier.GetSequencerOptions();
        var eventHandlerProxy   = StructProxy.CreateProxyInstance(eventHandler);
        var onBatchStartInvoker = CreateOnBatchStartEvaluator(eventHandler);

        var eventProcessorType = processorType.MakeGenericType(typeof(T), dataProviderProxy.GetType(), sequencerOptions.GetType(), eventHandlerProxy.GetType(), onBatchStartInvoker.GetType());

        return((IValueEventProcessor <T>)Activator.CreateInstance(eventProcessorType, dataProviderProxy, sequenceBarrier, eventHandlerProxy, onBatchStartInvoker) !);
    }
예제 #9
0
 /// <summary>
 /// Create a new <see cref="IEventProcessor{T}"/> with dedicated generic arguments.
 /// </summary>
 /// <typeparam name="T">the type of event used.</typeparam>
 /// <param name="dataProvider">dataProvider to which events are published</param>
 /// <param name="sequenceBarrier">SequenceBarrier on which it is waiting.</param>
 /// <param name="eventHandler">eventHandler is the delegate to which events are dispatched.</param>
 /// <returns></returns>
 public static IValueEventProcessor <T> Create <T>(IValueDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler)
     where T : struct
 {
     return(Create(dataProvider, sequenceBarrier, eventHandler, typeof(ValueEventProcessor <, , , ,>)));
 }