using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Ryujinx.Cpu.LightningJit { class CodeWriter { private readonly List _instructions; public int InstructionPointer => _instructions.Count; public CodeWriter() { _instructions = new(); } public void WriteInstruction(uint instruction) { _instructions.Add(instruction); } public void WriteInstructionAt(int index, uint instruction) { _instructions[index] = instruction; } public void WriteInstructionsAt(int index, CodeWriter writer) { _instructions.InsertRange(index, writer._instructions); } public uint ReadInstructionAt(int index) { return _instructions[index]; } public List GetList() { return _instructions; } public void RemoveLastInstruction() { if (_instructions.Count > 0) { _instructions.RemoveAt(_instructions.Count - 1); } } public ReadOnlySpan AsSpan() { return CollectionsMarshal.AsSpan(_instructions); } public ReadOnlySpan AsByteSpan() { return MemoryMarshal.Cast(AsSpan()); } } }