NSString.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using static Veldrid.MetalBindings.ObjectiveCRuntime;
  3. namespace Veldrid.MetalBindings
  4. {
  5. public unsafe struct NSString
  6. {
  7. public readonly IntPtr NativePtr;
  8. public NSString(IntPtr ptr) => NativePtr = ptr;
  9. public static implicit operator IntPtr(NSString nss) => nss.NativePtr;
  10. public static NSString New(string s)
  11. {
  12. var nss = s_class.Alloc<NSString>();
  13. fixed (char* utf16Ptr = s)
  14. {
  15. UIntPtr length = (UIntPtr)s.Length;
  16. IntPtr newString = IntPtr_objc_msgSend(nss, sel_initWithCharacters, (IntPtr)utf16Ptr, length);
  17. return new NSString(newString);
  18. }
  19. }
  20. public string GetValue()
  21. {
  22. byte* utf8Ptr = bytePtr_objc_msgSend(NativePtr, sel_utf8String);
  23. return MTLUtil.GetUtf8String(utf8Ptr);
  24. }
  25. private static readonly ObjCClass s_class = new ObjCClass(nameof(NSString));
  26. private static readonly Selector sel_initWithCharacters = "initWithCharacters:length:";
  27. private static readonly Selector sel_utf8String = "UTF8String";
  28. }
  29. }