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));
}
}
}