/// <summary> /// LevelingQueue constructor /// </summary> /// <param name="highLevelQueue">High level queue (queue with higher priority)</param> /// <param name="lowLevelQueue">Low level queue (queue with lower priority)</param> /// <param name="addingMode">Adding mode of the queue</param> /// <param name="isBackgroundTransferingEnabled">Is background transfering items from LowLevelQueue to HighLevelQueue enabled</param> public LevelingQueue(IQueue <T> highLevelQueue, IQueue <T> lowLevelQueue, LevelingQueueAddingMode addingMode, bool isBackgroundTransferingEnabled) { if (highLevelQueue == null) { throw new ArgumentNullException(nameof(highLevelQueue)); } if (lowLevelQueue == null) { throw new ArgumentNullException(nameof(lowLevelQueue)); } _highLevelQueue = highLevelQueue; _lowLevelQueue = lowLevelQueue; _addingMode = addingMode; _isBackgroundTransferingEnabled = isBackgroundTransferingEnabled; _addMonitor = new MonitorObject("LevelingQueue.AddMonitor"); _takeMonitor = new MonitorObject("LevelingQueue.TakeMonitor"); _peekMonitor = new MonitorObject("LevelingQueue.PeekMonitor"); _itemCount = highLevelQueue.Count + lowLevelQueue.Count; _isDisposed = false; if (isBackgroundTransferingEnabled) { _backgoundTransfererExclusive = new MutuallyExclusivePrimitive(); if (addingMode == LevelingQueueAddingMode.PreferLiveData) { _backgoundTransfererExclusive.AllowBackgroundGate(); // Allow background transfering from the start } _backgroundTransferer = new DelegateThreadSetManager(1, this.GetType().GetCSName() + "_" + this.GetHashCode().ToString() + " Background Transferer", BackgroundTransferProc); _backgroundTransferer.IsBackground = true; _backgroundTransferer.Start(); } }
private static LevelingQueue <int> CreateQueue(int highLevelSize, int lowLevelSize, bool ord = true, bool bcg = false) { LevelingQueueAddingMode mode = ord ? LevelingQueueAddingMode.PreserveOrder : LevelingQueueAddingMode.PreferLiveData; return(new LevelingQueue <int>(new MemoryQueue <int>(highLevelSize), new MemoryQueue <int>(lowLevelSize), mode, bcg)); }
private static LevelingQueue <int> CreateQueue(int highLevelSize, int lowLevelSize, LevelingQueueAddingMode addingMode = LevelingQueueAddingMode.PreserveOrder, bool isBcgTransferEnabled = false) { return(new LevelingQueue <int>(new MemoryQueue <int>(highLevelSize), new MemoryQueue <int>(lowLevelSize), addingMode, isBcgTransferEnabled)); }