Files
MicrosoftIris/UIX/Microsoft/Iris/Queues/Feeder.cs
T
2022-03-03 08:14:05 -06:00

71 lines
1.9 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.Queues.Feeder
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
namespace Microsoft.Iris.Queues
{
internal class Feeder
{
private Dispatcher _dispatcher;
private bool _hasItems;
private QueueItem.FIFO[] _fifos;
public bool HasItems => _hasItems;
public void EnterDispatch(Dispatcher dispatcher)
{
_dispatcher = dispatcher;
if (!_hasItems)
return;
_dispatcher.NotifyFeederItems();
}
public void LeaveDispatch(Dispatcher dispatcher) => _dispatcher = null;
public void PostItem(QueueItem item, int priority)
{
bool flag = false;
lock (this)
{
if (_fifos == null)
_fifos = new QueueItem.FIFO[32];
(_fifos[priority] ?? (_fifos[priority] = new QueueItem.FIFO())).Append(item);
if (!_hasItems)
{
_hasItems = true;
if (_dispatcher != null)
flag = true;
}
}
if (!flag)
return;
_dispatcher.NotifyFeederItems();
}
public QueueItem.FIFO[] HandoffFIFOs()
{
lock (this)
{
QueueItem.FIFO[] fifos = _fifos;
_fifos = null;
_hasItems = false;
return fifos;
}
}
public void RecycleFIFOs(QueueItem.FIFO[] recycled)
{
if (_fifos != null)
return;
lock (this)
{
if (_fifos != null)
return;
_fifos = recycled;
}
}
}
}