NSData.cs
2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Runtime.InteropServices;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
namespace UnityEngine.XR.ARKit
{
internal struct NSData : IDisposable, IEquatable<NSData>
{
IntPtr m_NativePtr;
public static implicit operator IntPtr(NSData data) => data.m_NativePtr;
public static unsafe NSData CreateWithBytes(void* bytes, int length)
{
return new NSData(UnityARKit_NSData_createWithBytes(bytes, length));
}
public static unsafe NSData CreateWithBytesNoCopy(void* bytes, int length, bool freeBytesOnDisposal = false)
{
return new NSData(UnityARKit_NSData_createWithBytesNoCopy(bytes, length, freeBytesOnDisposal));
}
public NSData(IntPtr nsData) => m_NativePtr = nsData;
public bool created => m_NativePtr != IntPtr.Zero;
public unsafe void* bytes => UnityARKit_NSData_getBytes(m_NativePtr);
public int length => UnityARKit_NSData_getLength(m_NativePtr);
public unsafe NativeSlice<byte> ToNativeSlice() => NativeSliceUnsafeUtility.ConvertExistingDataToNativeSlice<byte>(bytes, 1, length);
public void Dispose()
{
UnityARKit_CFRelease(m_NativePtr);
m_NativePtr = IntPtr.Zero;
}
// IEquatable boilerplate
public override int GetHashCode() => m_NativePtr.GetHashCode();
public override bool Equals(object obj) => (obj is NSData) && Equals((NSData)obj);
public bool Equals(NSData other) => m_NativePtr == other.m_NativePtr;
public static bool operator ==(NSData lhs, NSData rhs) => lhs.Equals(rhs);
public static bool operator !=(NSData lhs, NSData rhs) => !lhs.Equals(rhs);
[DllImport("__Internal")]
static extern void UnityARKit_CFRelease(IntPtr ptr);
[DllImport("__Internal")]
static extern unsafe void* UnityARKit_NSData_getBytes(IntPtr ptr);
[DllImport("__Internal")]
static extern int UnityARKit_NSData_getLength(IntPtr ptr);
[DllImport("__Internal")]
static extern unsafe IntPtr UnityARKit_NSData_createWithBytes(
void* bytes,
int length);
[DllImport("__Internal")]
static extern unsafe IntPtr UnityARKit_NSData_createWithBytesNoCopy(
void* byets,
int length,
bool freeWhenDone);
}
}