From 043beb03a9211506a284de2d1ef100f2069ae597 Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Wed, 2 Nov 2022 12:04:18 +0100 Subject: [PATCH] Add support for `DataContainer` in scripting api bindings --- Source/Engine/Core/Types/DataContainer.h | 14 ++++++++++++-- .../Flax.Build/Bindings/BindingsGenerator.Api.cs | 2 +- .../Bindings/BindingsGenerator.CSharp.cs | 4 ++-- .../Flax.Build/Bindings/BindingsGenerator.Cpp.cs | 12 ++++++------ 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Source/Engine/Core/Types/DataContainer.h b/Source/Engine/Core/Types/DataContainer.h index de6da6a34..38d9e2c22 100644 --- a/Source/Engine/Core/Types/DataContainer.h +++ b/Source/Engine/Core/Types/DataContainer.h @@ -35,7 +35,7 @@ public: /// /// The data pointer to link. /// The data length. - DataContainer(T* data, int32 length) + DataContainer(const T* data, int32 length) : Base(data, length) , _isAllocated(false) { @@ -47,7 +47,17 @@ public: /// The data array to link. template DataContainer(const Array& data) - : Base((T*)data.Get(), data.Count()) + : Base(data.Get(), data.Count()) + , _isAllocated(false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The data span to link. + DataContainer(const Span& data) + : Base(data.Get(), data.Length()) , _isAllocated(false) { } diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs index b8b042ffc..e4f8eb2aa 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Api.cs @@ -170,7 +170,7 @@ namespace Flax.Build.Bindings return false; // Skip for collections - if ((typeInfo.Type == "Array" || typeInfo.Type == "Span" || typeInfo.Type == "Dictionary" || typeInfo.Type == "HashSet") && typeInfo.GenericArgs != null) + if ((typeInfo.Type == "Array" || typeInfo.Type == "Span" || typeInfo.Type == "DataContainer" || typeInfo.Type == "Dictionary" || typeInfo.Type == "HashSet") && typeInfo.GenericArgs != null) return false; // Skip for special types diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs index 401c69abe..59a4df55e 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs @@ -285,8 +285,8 @@ namespace Flax.Build.Bindings typeInfo.Type == "SoftObjectReference") && typeInfo.GenericArgs != null) return GenerateCSharpNativeToManaged(buildData, typeInfo.GenericArgs[0], caller); - // Array or Span - if ((typeInfo.Type == "Array" || typeInfo.Type == "Span") && typeInfo.GenericArgs != null) + // Array or Span or DataContainer + if ((typeInfo.Type == "Array" || typeInfo.Type == "Span" || typeInfo.Type == "DataContainer") && typeInfo.GenericArgs != null) return GenerateCSharpNativeToManaged(buildData, typeInfo.GenericArgs[0], caller) + "[]"; // Dictionary diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs index 2667b2e74..4c8a9788d 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs @@ -436,8 +436,8 @@ namespace Flax.Build.Bindings return "{0}.GetManagedInstance()"; } - // Array or Span - if ((typeInfo.Type == "Array" || typeInfo.Type == "Span") && typeInfo.GenericArgs != null) + // Array or Span 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) + ")"; @@ -638,8 +638,8 @@ namespace Flax.Build.Bindings return "MUtils::ToArray<" + T + ">({0})"; } - // Span - if (typeInfo.Type == "Span" && typeInfo.GenericArgs != null) + // Span or DataContainer + if ((typeInfo.Type == "Span" || typeInfo.Type == "DataContainer") && typeInfo.GenericArgs != null) { type = "MonoArray*"; @@ -780,8 +780,8 @@ namespace Flax.Build.Bindings if (apiType != null && apiType.IsScriptingObject) return $"ScriptingObject::ToManaged((ScriptingObject*){value})"; - // Array or Span - if ((typeInfo.Type == "Array" || typeInfo.Type == "Span") && typeInfo.GenericArgs != null && typeInfo.GenericArgs.Count >= 1) + // Array or Span or DataContainer + if ((typeInfo.Type == "Array" || typeInfo.Type == "Span" || typeInfo.Type == "DataContainer") && typeInfo.GenericArgs != null && typeInfo.GenericArgs.Count >= 1) return $"MUtils::ToArray({value}, {GenerateCppGetNativeClass(buildData, typeInfo.GenericArgs[0], caller, null)})"; // BytesContainer