SW 중심대학 OSS GIT 서버 박건태, 이승준, 고기완, 이준호 새로운 배포
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.2 KiB

4 years ago
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using Unity.Collections;
  4. using Unity.Collections.LowLevel.Unsafe;
  5. namespace UnityEngine.XR.ARKit
  6. {
  7. internal struct NSMutableData : IDisposable, IEquatable<NSMutableData>
  8. {
  9. IntPtr m_NativePtr;
  10. public static implicit operator IntPtr(NSMutableData data) => data.m_NativePtr;
  11. public unsafe NSMutableData(void* bytes, int length)
  12. {
  13. m_NativePtr = UnityARKit_NSMutableData_createWithBytes(bytes, length);
  14. }
  15. public NSData ToNSData() => new NSData(m_NativePtr);
  16. public bool created => m_NativePtr != IntPtr.Zero;
  17. public unsafe void* bytes => ToNSData().bytes;
  18. public int length => ToNSData().length;
  19. public IntPtr ptr => m_NativePtr;
  20. public unsafe void Append(void* bytes, int length)
  21. {
  22. if (!created)
  23. throw new InvalidOperationException("The NSMutableArray has not been created.");
  24. if (bytes == null)
  25. throw new ArgumentNullException(nameof(bytes));
  26. UnityARKit_NSMutableData_append(
  27. m_NativePtr,
  28. bytes,
  29. length);
  30. }
  31. public void Dispose()
  32. {
  33. UnityARKit_CFRelease(m_NativePtr);
  34. m_NativePtr = IntPtr.Zero;
  35. }
  36. public override int GetHashCode() => m_NativePtr.GetHashCode();
  37. public override bool Equals(object obj) => (obj is NSMutableData) && Equals((NSMutableData)obj);
  38. public bool Equals(NSMutableData other) => m_NativePtr == other.m_NativePtr;
  39. public static bool operator ==(NSMutableData lhs, NSMutableData rhs) => lhs.Equals(rhs);
  40. public static bool operator !=(NSMutableData lhs, NSMutableData rhs) => !lhs.Equals(rhs);
  41. [DllImport("__Internal")]
  42. static extern void UnityARKit_CFRelease(IntPtr ptr);
  43. [DllImport("__Internal")]
  44. static extern unsafe void UnityARKit_NSMutableData_append(
  45. IntPtr nsMutableData,
  46. void* bytes,
  47. int length);
  48. [DllImport("__Internal")]
  49. static extern unsafe IntPtr UnityARKit_NSMutableData_createWithBytes(
  50. void* bytes,
  51. int length);
  52. }
  53. }