Add Span<T> support for scripting fields
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
/// Universal representation of a contiguous region of arbitrary memory.
|
||||
/// </summary>
|
||||
template<typename T>
|
||||
class Span
|
||||
API_CLASS(InBuild) class Span
|
||||
{
|
||||
protected:
|
||||
T* _data;
|
||||
|
||||
@@ -499,8 +499,8 @@ namespace MUtils
|
||||
/// </summary>
|
||||
/// <param name="data">The native array object.</param>
|
||||
/// <returns>The output array pointer and size.</returns>
|
||||
template<typename T>
|
||||
FORCE_INLINE Span<T> ToSpan(const Array<T>& data)
|
||||
template<typename T, typename AllocationType = HeapAllocation>
|
||||
FORCE_INLINE Span<T> ToSpan(const Array<T, AllocationType>& data)
|
||||
{
|
||||
return Span<T>(data.Get(), data.Count());
|
||||
}
|
||||
|
||||
@@ -172,6 +172,10 @@ namespace Flax.Build.Bindings
|
||||
CppVariantFromTypes[wrapperName] = typeInfo;
|
||||
return $"VariantFrom{wrapperName}Dictionary({value})";
|
||||
}
|
||||
if (typeInfo.Type == "Span" && typeInfo.GenericArgs != null)
|
||||
{
|
||||
return "Variant()"; // TODO: Span to Variant converting (use utility method the same way as for arrays)
|
||||
}
|
||||
|
||||
var apiType = FindApiTypeInfo(buildData, typeInfo, caller);
|
||||
if (apiType != null)
|
||||
@@ -218,6 +222,10 @@ namespace Flax.Build.Bindings
|
||||
CppVariantToTypes.Add(typeInfo);
|
||||
return $"MoveTemp(VariantTo{GenerateCppWrapperNativeToVariantMethodName(typeInfo)}({value}))";
|
||||
}
|
||||
if (typeInfo.Type == "Span" && typeInfo.GenericArgs != null)
|
||||
{
|
||||
return $"{typeInfo}()"; // Cannot be implemented since Variant stores array of Variants thus cannot get linear span of data
|
||||
}
|
||||
|
||||
var apiType = FindApiTypeInfo(buildData, typeInfo, caller);
|
||||
if (apiType != null)
|
||||
@@ -482,13 +490,20 @@ namespace Flax.Build.Bindings
|
||||
return "{0}.GetManagedInstance()";
|
||||
}
|
||||
|
||||
// Array or Span or DataContainer
|
||||
// Array or DataContainer
|
||||
if ((typeInfo.Type == "Array" || typeInfo.Type == "Span" || typeInfo.Type == "DataContainer") && typeInfo.GenericArgs != null)
|
||||
{
|
||||
type = "MonoArray*";
|
||||
return "MUtils::ToArray({0}, " + GenerateCppGetNativeClass(buildData, typeInfo.GenericArgs[0], caller, functionInfo) + ")";
|
||||
}
|
||||
|
||||
// Span
|
||||
if (typeInfo.Type == "Span" && typeInfo.GenericArgs != null)
|
||||
{
|
||||
type = "MonoArray*";
|
||||
return "MUtils::Span({0}, " + GenerateCppGetNativeClass(buildData, typeInfo.GenericArgs[0], caller, functionInfo) + ")";
|
||||
}
|
||||
|
||||
// BytesContainer
|
||||
if (typeInfo.Type == "BytesContainer" && typeInfo.GenericArgs == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user