mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-11-08 17:58:33 +00:00
e00ca92063
* Return "NotAvailable" when no UserChannel data is present. * Return ObjectInvalid for undefined parameter kinds. * No need to specify which, there's only one. * Just works as a literal string.
59 lines
1.5 KiB
C#
59 lines
1.5 KiB
C#
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Ryujinx.HLE.HOS
|
|
{
|
|
public class UserChannelPersistence
|
|
{
|
|
private Stack<byte[]> _userChannelStorages;
|
|
public int PreviousIndex { get; private set; }
|
|
public int Index { get; private set; }
|
|
public ProgramSpecifyKind Kind { get; private set; }
|
|
|
|
public UserChannelPersistence()
|
|
{
|
|
_userChannelStorages = new Stack<byte[]>();
|
|
Kind = ProgramSpecifyKind.ExecuteProgram;
|
|
PreviousIndex = -1;
|
|
Index = 0;
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
_userChannelStorages.Clear();
|
|
}
|
|
|
|
public void Push(byte[] data)
|
|
{
|
|
_userChannelStorages.Push(data);
|
|
}
|
|
|
|
public byte[] Pop()
|
|
{
|
|
_userChannelStorages.TryPop(out byte[] result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool IsEmpty => _userChannelStorages.Count == 0;
|
|
|
|
public void ExecuteProgram(ProgramSpecifyKind kind, ulong value)
|
|
{
|
|
Kind = kind;
|
|
PreviousIndex = Index;
|
|
|
|
switch (kind)
|
|
{
|
|
case ProgramSpecifyKind.ExecuteProgram:
|
|
Index = (int)value;
|
|
break;
|
|
case ProgramSpecifyKind.RestartProgram:
|
|
break;
|
|
default:
|
|
throw new NotImplementedException($"{kind} not implemented");
|
|
}
|
|
}
|
|
}
|
|
}
|