Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 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));
 }