using System; namespace SharpGen.Runtime { public static partial class MarshallingHelpers { /// /// Converts an array to an array of native object pointers. /// public static void ConvertToPointerArray(Span pointers, ReadOnlySpan interfaces) where TCallback : ICallbackable { var arrayLength = interfaces.Length; Guid? callbackTypeGuid = null; for (var i = 0; i < arrayLength; ++i) pointers[i] = interfaces[i] switch { null => IntPtr.Zero, CppObject cpp => cpp.NativePointer, { } item => item.Shadow.Find(callbackTypeGuid ??= GetCallbackTypeGuid()) }; static Guid GetCallbackTypeGuid() => ShadowContainer.GuidFromType(typeof(TCallback)); } /// /// Converts an array to an array of native object pointers. /// public static void ConvertToPointerArray(Span pointers, Span interfaces) where TCallback : ICallbackable { var arrayLength = interfaces.Length; Guid? callbackTypeGuid = null; for (var i = 0; i < arrayLength; ++i) pointers[i] = interfaces[i] switch { null => IntPtr.Zero, CppObject cpp => cpp.NativePointer, { } item => item.Shadow.Find(callbackTypeGuid ??= GetCallbackTypeGuid()) }; static Guid GetCallbackTypeGuid() => ShadowContainer.GuidFromType(typeof(TCallback)); } /// /// Converts an array to an array of native object pointers. /// public static void ConvertToPointerArray(Span pointers, TCallback[] interfaces) where TCallback : ICallbackable { var arrayLength = interfaces.Length; Guid? callbackTypeGuid = null; for (var i = 0; i < arrayLength; ++i) pointers[i] = interfaces[i] switch { null => IntPtr.Zero, CppObject cpp => cpp.NativePointer, { } item => item.Shadow.Find(callbackTypeGuid ??= GetCallbackTypeGuid()) }; static Guid GetCallbackTypeGuid() => ShadowContainer.GuidFromType(typeof(TCallback)); } /// /// Converts an array to an array of native object pointers. /// public static void ConvertToPointerArray(Span pointers, ICallbackable[] interfaces) where TCallback : ICallbackable { var arrayLength = interfaces.Length; Guid? callbackTypeGuid = null; for (var i = 0; i < arrayLength; ++i) pointers[i] = interfaces[i] switch { null => IntPtr.Zero, CppObject cpp => cpp.NativePointer, { } item => item.Shadow.Find(callbackTypeGuid ??= GetCallbackTypeGuid()) }; static Guid GetCallbackTypeGuid() => ShadowContainer.GuidFromType(typeof(TCallback)); } } }