NvapiUnicodeString.cs 1013 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.Runtime.InteropServices;
  2. using System.Text;
  3. namespace Ryujinx.Common.GraphicsDriver.NVAPI
  4. {
  5. [StructLayout(LayoutKind.Sequential, Pack = 4)]
  6. public unsafe struct NvapiUnicodeString
  7. {
  8. private fixed byte _data[4096];
  9. public NvapiUnicodeString(string text)
  10. {
  11. Set(text);
  12. }
  13. public string Get()
  14. {
  15. fixed (byte* data = _data)
  16. {
  17. string text = Encoding.Unicode.GetString(data, 4096);
  18. int index = text.IndexOf('\0');
  19. if (index > -1)
  20. {
  21. text = text.Remove(index);
  22. }
  23. return text;
  24. }
  25. }
  26. public void Set(string text)
  27. {
  28. text += '\0';
  29. fixed (char* textPtr = text)
  30. fixed (byte* data = _data)
  31. {
  32. int written = Encoding.Unicode.GetBytes(textPtr, text.Length, data, 4096);
  33. }
  34. }
  35. }
  36. }