rabidus-test/Assets/Plugins/QFSW/Quantum Console/Source/Scripts/Logging/LogQueue.cs

36 lines
881 B
C#

using System.Collections.Concurrent;
namespace QFSW.QC
{
public class LogQueue : ILogQueue
{
private readonly ConcurrentQueue<ILog> _queuedLogs = new ConcurrentQueue<ILog>();
public int MaxStoredLogs { get; set; }
public bool IsEmpty => _queuedLogs.IsEmpty;
public LogQueue(int maxStoredLogs = -1)
{
MaxStoredLogs = maxStoredLogs;
}
public void QueueLog(ILog log)
{
_queuedLogs.Enqueue(log);
if (MaxStoredLogs > 0 && _queuedLogs.Count > MaxStoredLogs)
{
_queuedLogs.TryDequeue(out _);
}
}
public bool TryDequeue(out ILog log)
{
return _queuedLogs.TryDequeue(out log);
}
public void Clear()
{
while (TryDequeue(out ILog _)) { }
}
}
}