public void Put()

in csharp/src/Containers/DataQueue.cs [414:515]


		public void Put(Decimal64 data, DateTime time)
		{
			if (time == DefaultDateTime)
			{
				Put(data);
				return;
			}
			if (queueType == QueueType.ManualControl)
				throw new InvalidOperationException("DataQueue: Use Manual methods putLast, putFirst.");

			if (!needDateTime)
				throw new InvalidOperationException("DataQueue: Do not use both with and without DateTime method for one queue instance.");

			if (queueType == QueueType.SingleElement)
			{
				if (calcStatistics)
					stat.Init();

				if (count > 0)
				{
					count = 0;
					OnPop?.Invoke(singleElement, singleElementDate);
				}

				count = 1;
				previousElementDate = singleElementDate;
				previousElement = singleElement;
				singleElement = data;
				singleElementDate = time;

				if (calcStatistics)
					stat.Set(data);
				OnPush?.Invoke(singleElement, singleElementDate);
			}
			else
			{
				int prevIndex = last == 0 ? queueDates.Length - 1 : last - 1;

				if (count > 0 && time < queueDates[prevIndex])
					throw new ArgumentOutOfRangeException("DataQueue: New element has time less then last element.");

				if (queueType == QueueType.AutoDynamic)
				{
					// Lets delete outdated data
					// if our queue not empty and if first element have to older date then drop it
					while (count > 0 && queueDates[first] + period < time)
					{
						count--;
						int tempIndex = first++;
						if (first == queueDates.Length)
							first = 0;

						Decimal64 data2 = queueBuffer[tempIndex];
						if (calcStatistics)
							stat.Pop(data2);
						
						OnPop?.Invoke(data2, queueDates[tempIndex]);
					}

					if (count > 0 && first == last)
						Expand();


					count++;

					queueBuffer[last] = data;
					queueDates[last++] = time;
					if (last == queueBuffer.Length)
						last = 0;

					if (calcStatistics)
						stat.Push(data);
				}
				else
				{
					if (count == queueBuffer.Length) // Need to drop something ?
					{
						count--;
						int tempIndex = first++;
						if (first == queueBuffer.Length)
							first = 0;

						Decimal64 data_ = queueBuffer[tempIndex];
						if (calcStatistics)
							stat.Pop(data_);

						OnPop?.Invoke(data_, queueDates[tempIndex]);
					}

					count++;
					queueBuffer[last] = data;
					queueDates[last++] = time;
					if (last == queueBuffer.Length)
						last = 0;

					if (calcStatistics)
						stat.Push(data);

				}
			}
			OnPush?.Invoke(data, time);
		}