using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
{
internal class AppletFifo<T> : IAppletFifo<T>
private ConcurrentQueue<T> _dataQueue;
public event EventHandler DataAvailable;
public bool IsSynchronized
get { return ((ICollection)_dataQueue).IsSynchronized; }
}
public object SyncRoot
get { return ((ICollection)_dataQueue).SyncRoot; }
public int Count
get { return _dataQueue.Count; }
public AppletFifo()
_dataQueue = new ConcurrentQueue<T>();
public void Push(T item)
_dataQueue.Enqueue(item);
DataAvailable?.Invoke(this, null);
public bool TryAdd(T item)
try
this.Push(item);
return true;
catch
return false;
public T Pop()
if (_dataQueue.TryDequeue(out T result))
return result;
throw new InvalidOperationException("FIFO empty.");
public bool TryPop(out T result)
return _dataQueue.TryDequeue(out result);
public bool TryTake(out T item)
return this.TryPop(out item);
public T Peek()
if (_dataQueue.TryPeek(out T result))
public bool TryPeek(out T result)
return _dataQueue.TryPeek(out result);
public void Clear()
_dataQueue.Clear();
public T[] ToArray()
return _dataQueue.ToArray();
public void CopyTo(T[] array, int arrayIndex)
_dataQueue.CopyTo(array, arrayIndex);
public void CopyTo(Array array, int index)
this.CopyTo((T[])array, index);
public IEnumerator<T> GetEnumerator()
return _dataQueue.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()