WritableRegion.cs 921 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System;
  2. namespace Ryujinx.Memory
  3. {
  4. public sealed class WritableRegion : IDisposable
  5. {
  6. private readonly IWritableBlock _block;
  7. private readonly ulong _va;
  8. private readonly bool _tracked;
  9. private bool NeedsWriteback => _block != null;
  10. public Memory<byte> Memory { get; }
  11. public WritableRegion(IWritableBlock block, ulong va, Memory<byte> memory, bool tracked = false)
  12. {
  13. _block = block;
  14. _va = va;
  15. _tracked = tracked;
  16. Memory = memory;
  17. }
  18. public void Dispose()
  19. {
  20. if (NeedsWriteback)
  21. {
  22. if (_tracked)
  23. {
  24. _block.Write(_va, Memory.Span);
  25. }
  26. else
  27. {
  28. _block.WriteUntracked(_va, Memory.Span);
  29. }
  30. }
  31. }
  32. }
  33. }