xamarin-macios/runtime/bindings-generator.cs

3851 строка
121 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
/*
* This code will generate native functions that are referenced by the MarshalDirective
* attribute in binding code.
*
* If a MarshalDirective makes the generator create a P/Invoke to a signature
* that doesn't already exist, a new signature entry will have to be added
* in the GetFunctionData method.
*
* Then just re-build and bindings-generated.m will be re-created with the
* new signature.
*
*/
namespace Xamarin.BindingMethods.Generator {
class MainClass {
public static int Main (string [] args)
{
if (args.Length == 0) {
Console.WriteLine ("Output filename must be specified");
return 1;
}
var fn = args [0];
using (var writer = new StringWriter ()) {
writer.WriteLine ("/* This file is generated */");
writer.WriteLine ();
writer.WriteLine ("#include \"bindings.h\"");
writer.WriteLine ("#include <CoreGraphics/CoreGraphics.h>");
writer.WriteLine ();
writer.WriteLine ("#ifdef __cplusplus");
writer.WriteLine ("extern \"C\" {");
writer.WriteLine ("#endif");
writer.WriteLine ();
writer.WriteLine ("#if !DOTNET");
var data = GetFunctionData ();
WriteData (writer, data);
writer.WriteLine ("#else");
var dotNetData = GetFunctionData (true);
WriteData (writer, dotNetData);
writer.WriteLine ("#endif // DOTNET");
writer.WriteLine ("#ifdef __cplusplus");
writer.WriteLine ("} /* extern \"C\" */");
writer.WriteLine ("#endif");
writer.WriteLine ();
var generated_data = writer.ToString ();
File.WriteAllText (fn, generated_data);
return 0;
}
}
static void WriteData (StringWriter writer, IEnumerable<FunctionData> data)
{
var writtenData = new HashSet<string> ();
foreach (var func in data) {
var funcName = GetFuncName (func, string.Empty);
if (!writtenData.Add (funcName)) {
Console.WriteLine ("Already generated {0}", funcName);
continue;
}
writer.WriteLine (func.Comment);
writer.WriteLine ();
if ((func.Variants & Variants.msgSend) == Variants.msgSend) {
Write_objc_msgSend (writer, func);
}
if ((func.Variants & Variants.msgSendSuper) == Variants.msgSendSuper) {
Write_objc_msgSendSuper (writer, func);
}
if ((func.Variants & Variants.msgSend_stret) == Variants.msgSend_stret) {
Write_objc_msgSend_stret (writer, func);
}
if ((func.Variants & Variants.msgSendSuper_stret) == Variants.msgSendSuper_stret) {
Write_objc_msgSendSuper_stret (writer, func);
}
}
}
static IEnumerable<FunctionData> GetFunctionData (bool isDotNet = false)
{
var data = new List<FunctionData> ();
Types.IsDotNet = isDotNet;
data.Add (
new FunctionData {
Comment = " // NVector3 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NVector3,
}
);
data.Add (
new FunctionData {
Comment = " // void func (NVector3)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3 }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector3)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func (Vector3)",
Prefix = "simd__",
Variants = Variants.All,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 }
},
ReturnType = Types.Vector3,
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
}
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector3, Double)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Double },
}
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, IntPtr)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.NativeHandleType },
}
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func () => Vector4f func ()",
Prefix = "vector_float3__",
Variants = Variants.All,
ReturnType = Types.Vector3As4,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector3) => void func (Vector4f)",
Prefix = "vector_float3__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3As4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector2)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector4)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4 }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector4 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector4,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.Vector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, Vector4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.Vector4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, Vector2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.Vector2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2i func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2i,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, UInt32, Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.UInt32 },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2 func (nuint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NUInt }
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2i, int, int, bool)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Bool }
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, IntPtr, Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, IntPtr, Vector2i, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, bool, IntPtr, Vector2i, nint, nuint, nint, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2, Vector2i, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, nuint, nuint, nint, bool, bool, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector3i, nint, bool, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector3i },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector3i, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector3i },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector3, Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, Vector2, nuint, nuint, nint, bool, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, Vector2, nuint, nuint, nuint, nint, bool, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // bool func (Vector2i, IntPtr, IntPtr, IntPtr, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.Bool,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // bool func (Vector2i, nint, float, IntPtr, IntPtr, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.Bool,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // MDLAxisAlignedBoundingBox func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MDLAxisAlignedBoundingBox,
}
);
data.Add (
new FunctionData {
Comment = " // void func (MDLAxisAlignedBoundingBox)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.MDLAxisAlignedBoundingBox },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (MDLAxisAlignedBoundingBox, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.MDLAxisAlignedBoundingBox },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // MDLAxisAlignedBoundingBox func (Vector4i)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MDLAxisAlignedBoundingBox,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, MDLAxisAlignedBoundingBox, Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.MDLAxisAlignedBoundingBox },
new ParameterData { TypeData = Types.Vector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // MDLAxisAlignedBoundingBox func (double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MDLAxisAlignedBoundingBox,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // MDLAxisAlignedBoundingBox func (float)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MDLAxisAlignedBoundingBox,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, MDLAxisAlignedBoundingBox, float)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.MDLAxisAlignedBoundingBox },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func (Vector4i)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4i },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector4i)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4i },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector4i func (Vector3)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector4i,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, IntPtr, Vector2i, nint)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NInt },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (bool, IntPtr, nint, Vector2i, float, float, float, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // bool func (Vector4i, bool, bool, bool, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.Bool,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4i },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, Vector2i, float, float, float, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, float, IntPtr, Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, IntPtr, Vector2i, int, nint, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, IntPtr, Vector2i, int, nint, IntPtr, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, IntPtr, IntPtr, Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // Vector3 func (Vector2i, Vector2i)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func (IntPtr)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, Matrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.Matrix4f },
},
}
);
data.Add (
new FunctionData {
Comment = " // Matrix4 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix4f,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Matrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix4f },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Matrix4, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix4f },
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // Matrix4 func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix4f,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // Matrix4 func (IntPtr, Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix4f,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Double },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NMatrix4 func (IntPtr, Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Double },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (Matrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix4f },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector3f func (Vector3f)",
Prefix = "vector_float3__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
},
}
);
/* Exception handling */
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
},
ReturnType = Types.NativeHandleType,
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, ref IntPtr); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.IntPtr, IsRef = true },
},
ReturnType = Types.IntPtr,
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, IntPtr, int); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.Int32 },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, IntPtr, nuint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (int, int, int); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Int32 },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (nint, nint, nint, nint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, nint, nuint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NUInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, nint, nint, nint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, nint, nint, nuint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NUInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, nint, nint); @try",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Vector2); @try",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2 },
},
MarshalExceptions = true,
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Vector2); @try",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2 },
},
MarshalExceptions = true,
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Vector2, Vector2); @try",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2, Vector2); @try",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
},
MarshalExceptions = true,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2, Vector2, float); @try",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Float },
},
MarshalExceptions = true,
}
);
// Required for SpriteKit
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Matrix2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix2f },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Matrix2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix2f },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Matrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix3f },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Matrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix3f },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Matrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix4f },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Matrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Matrix4f },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector3 },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Vector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector3 },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Vector4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector4 },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandleType func (NativeHandleType, Vector4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector4 },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (nint, nint, Vector2, Vector2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // Matrix2 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix2f,
}
);
data.Add (
new FunctionData {
Comment = " // Matrix3 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix3f,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Matrix2)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix2f },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Matrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix3f },
},
}
);
data.Add (
new FunctionData {
Comment = " // Quaternion func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.QuatF,
}
);
data.Add (
new FunctionData {
Comment = " // void func (Quaternion, double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.QuatF },
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Quaterniond, double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.QuatD },
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Quaternion)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.QuatF },
},
}
);
data.Add (
new FunctionData {
Comment = " // Quaterniond func (double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.QuatD,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // Quaternion func (double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.QuatF,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double },
},
}
);
// Required for ModelIO
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Matrix4, bool);",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Matrix4f },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector2i, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, UInt32, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.UInt32 },
new ParameterData { TypeData = Types.IntPtr },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, int, UInt32, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.UInt32 },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector2i, bool, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector2i, bool, bool, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector2i, int, bool, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector3, Vector2i, nint, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3 },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Vector2d, Vector2d, Vector2i, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2d },
new ParameterData { TypeData = Types.Vector2d },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2i, int, int, bool, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Int32 },
new ParameterData { TypeData = Types.Bool },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, Vector2, Vector2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (float, Vector2, Vector2, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2d func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2d
}
);
data.Add (
new FunctionData {
Comment = " // Vector3 func (nuint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NUInt },
},
}
);
data.Add (
new FunctionData {
Comment = " // float func (Vector2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.Float,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // float func (Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.Float,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (IntPtr, Vector2, Vector2, nint)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.NInt },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (IntPtr, Vector2, Vector2)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Vector2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector3d)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector3d },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NVector3d)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3d },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (float, Vector2i)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Vector2i },
},
}
);
data.Add (
new FunctionData {
Comment = " // GKBox func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.GKBox
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (GKBox)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.GKBox },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (GKBox, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.GKBox },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, GKBox)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.GKBox },
},
}
);
data.Add (
new FunctionData {
Comment = " // GKQuad func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.GKQuad
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (GKQuad)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.GKQuad },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (GKQuad, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.GKQuad },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, GKQuad)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.GKQuad },
},
}
);
data.Add (
new FunctionData {
Comment = " // GKTriangle func (nuint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.GKTriangle,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NUInt },
},
}
);
// Required for ARKit
data.Add (
new FunctionData {
Comment = " // Matrix4 func (/* UIInterfaceOrientation */ nint, CGSize, nfloat, nfloat)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix4f,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.CGSize },
new ParameterData { TypeData = Types.NFloat },
new ParameterData { TypeData = Types.NFloat },
},
}
);
data.Add (
new FunctionData {
Comment = " // CGPoint func (Vector3, /* UIInterfaceOrientation */ nint, CGSize)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.CGPoint,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.CGSize },
},
}
);
data.Add (
new FunctionData {
Comment = " // Matrix4 func (/* UIInterfaceOrientation */ nint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Matrix4f,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
},
}
);
data.Add (
new FunctionData {
Comment = " // MPSImageHistogramInfo func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MPSImageHistogramInfo,
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix2)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix2 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix2,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, ref MPSImageHistogramInfo)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.MPSImageHistogramInfo, IsRef = true },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, NMatrix2)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NMatrix2 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (NMatrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // MDLVoxelIndexExtent func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MDLVoxelIndexExtent,
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix3 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix3,
}
);
data.Add (
new FunctionData {
Comment = " // void func (MDLVoxelIndexExtent)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.MDLVoxelIndexExtent },
}
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, NMatrix3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NMatrix3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (NMatrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix4, double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (NMatrix4, bool)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.Bool },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (NMatrix4, NVector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.NVector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix4, NVector3, NVector3, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, NMatrix4, NVector3)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.NVector3 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (MDLVoxelIndexExtent)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.MDLVoxelIndexExtent },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nuint, NMatrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NUInt },
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4 func (nint, CGSize, nfloat, nfloat)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.CGSize },
new ParameterData { TypeData = Types.NFloat },
new ParameterData { TypeData = Types.NFloat },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4 func (double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4 func (nint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NInt },
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NMatrix4 func (NativeHandle)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
},
}
);
}
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, NMatrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.IntPtr,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, NMatrix4)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4x3 func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4x3,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, nint, Vector2i, float, float, float, float, float)",
Prefix = "simd__",
Variants = Variants.NonStret,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.Vector2i },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
new ParameterData { TypeData = Types.Float },
},
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4d func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4d
}
);
data.Add (
new FunctionData {
Comment = " // NMatrix4d func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NMatrix4d,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
}
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix4d, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4d },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NMatrix4d)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NMatrix4d }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector2, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2 },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector2d, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2d },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2 func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2d func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2d,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector2 func (IntPtr)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.IntPtr }
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // Vector2 func (NativeHandle)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector2,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType }
},
}
);
}
data.Add (
new FunctionData {
Comment = " // void func (NVector3, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NVector3d, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3d },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // NVector3 func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NVector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // NVector3 func (CGPoint, NMatrix4, nint, CGSize)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NVector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.CGPoint },
new ParameterData { TypeData = Types.NMatrix4 },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.CGSize },
},
}
);
data.Add (
new FunctionData {
Comment = " // NVector3 func (CGPoint, NMatrix4)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NVector3,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.CGPoint },
new ParameterData { TypeData = Types.NMatrix4 },
},
}
);
data.Add (
new FunctionData {
Comment = " // NVector3d func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NVector3d,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector4, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4 },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (Vector4d, Double)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector4d },
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector4 func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector4,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // Vector4d func (Double)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.Vector4d,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Double }
},
}
);
data.Add (
new FunctionData {
Comment = " // MPSAxisAlignedBoundingBox func ()",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.MPSAxisAlignedBoundingBox,
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (NVector3, NVector3, nint, nint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NInt },
new ParameterData { TypeData = Types.NInt },
},
}
);
data.Add (
new FunctionData {
Comment = " // void func (NVector3, IntPtr)",
Prefix = "simd__",
Variants = Variants.NonStret,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NVector3 },
new ParameterData { TypeData = Types.NativeHandleType }
}
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Quaternion)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.QuatF }
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (IntPtr, Quaternion, IntPtr)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.NativeHandleType },
new ParameterData { TypeData = Types.QuatF },
new ParameterData { TypeData = Types.NativeHandleType }
},
}
);
data.Add (
new FunctionData {
Comment = " // IntPtr func (Vector2D, nint)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2d },
new ParameterData { TypeData = Types.NInt }
},
}
);
if (isDotNet) {
data.Add (
new FunctionData {
Comment = " // NativeHandle func (Vector2D, NativeHandle)",
Prefix = "simd__",
Variants = Variants.All,
ReturnType = Types.NativeHandleType,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2d },
new ParameterData { TypeData = Types.NativeHandleType }
},
}
);
}
data.Add (
new FunctionData {
Comment = " // void func (Vector2D)",
Prefix = "simd__",
Variants = Variants.msgSend | Variants.msgSendSuper,
Parameters = new ParameterData [] {
new ParameterData { TypeData = Types.Vector2d },
},
}
);
// We must expand functions with native types to their actual type as well.
for (int i = data.Count - 1; i >= 0; i--) {
if (!data [i].HasNativeType)
continue;
data.Add (data [i].CloneAsResolvedNativeType (true));
data.Add (data [i].CloneAsResolvedNativeType (false));
}
return data;
}
static string GetTypeNameForSignature (string managed_type)
{
return managed_type;
}
static void MarshalToManaged (StringWriter writer, TypeData type, string nativeVariable, string managedVariable, bool isRef = false)
{
var accessor = isRef ? "->" : ".";
switch (type.ManagedType) {
case "NVector2d":
case "Vector2d":
case "NVector2i":
case "Vector2i":
case "Vector2":
writer.WriteLine ("\t{0}{2}a = {1} [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}b = {1} [1];", managedVariable, nativeVariable, accessor);
break;
case "Vector3d":
case "Vector3i":
case "NVector3i":
case "Vector3":
writer.WriteLine ("\t{0}{2}a = {1} [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}b = {1} [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}c = {1} [2];", managedVariable, nativeVariable, accessor);
break;
case "NVector3":
case "NVector3d":
writer.WriteLine ("\t{0}{2}a = {1} [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}b = {1} [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}c = {1} [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{1}d = 0;", managedVariable, accessor);
break;
case "NVector4d":
case "Vector4d":
case "NVector4i":
case "Vector4i":
case "Vector4":
if (type.NativeType == "vector_float3") {
writer.WriteLine ("\t{0}{2}a = {1} [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}b = {1} [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}c = {1} [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{1}d = 0;", managedVariable, accessor);
} else if (type.NativeType == "vector_float4" || type.NativeType == "vector_int4" || type.NativeType == "vector_double4") {
writer.WriteLine ("\t{0}{2}a = {1} [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}b = {1} [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}c = {1} [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}d = {1} [3];", managedVariable, nativeVariable, accessor);
} else {
goto default;
}
break;
case "Matrix2":
case "NMatrix2":
writer.WriteLine ("\tfor (int i = 0; i < 2; i++) {");
writer.WriteLine ("\t\t{0}{2}columns [i].a = {1}.columns [i] [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].b = {1}.columns [i] [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Matrix3":
case "RMatrix3":
case "NMatrix3":
writer.WriteLine ("\tfor (int i = 0; i < 3; i++) {");
writer.WriteLine ("\t\t{0}{2}columns [i].a = {1}.columns [i] [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].b = {1}.columns [i] [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].c = {1}.columns [i] [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Matrix4":
case "Matrix4x4":
case "NMatrix4":
case "NMatrix4d":
writer.WriteLine ("\tfor (int i = 0; i < 4; i++) {");
writer.WriteLine ("\t\t{0}{2}columns [i].a = {1}.columns [i] [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].b = {1}.columns [i] [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].c = {1}.columns [i] [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].d = {1}.columns [i] [3];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t}");
break;
case "NMatrix4x3":
writer.WriteLine ("\tfor (int i = 0; i < 4; i++) {");
writer.WriteLine ("\t\t{0}{2}columns [i].a = {1}.columns [i] [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].b = {1}.columns [i] [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}columns [i].c = {1}.columns [i] [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t}");
break;
case "MDLAxisAlignedBoundingBox":
writer.WriteLine ("\t{0}{2}maxBounds.a = {1}.maxBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxBounds.b = {1}.maxBounds [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxBounds.c = {1}.maxBounds [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.a = {1}.minBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.b = {1}.minBounds [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.c = {1}.minBounds [2];", managedVariable, nativeVariable, accessor);
break;
case "GKBox":
writer.WriteLine ("\t{0}{2}maxBounds.a = {1}.maxBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxBounds.b = {1}.maxBounds [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxBounds.c = {1}.maxBounds [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.a = {1}.minBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.b = {1}.minBounds [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.c = {1}.minBounds [2];", managedVariable, nativeVariable, accessor);
break;
case "GKQuad":
writer.WriteLine ("\t{0}{2}maxBounds.a = {1}.maxBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxBounds.b = {1}.maxBounds [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.a = {1}.minBounds [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minBounds.b = {1}.minBounds [1];", managedVariable, nativeVariable, accessor);
break;
case "GKTriangle":
writer.WriteLine ("\tfor (int i = 0; i < 3; i++) {");
writer.WriteLine ("\t\t{0}{2}points [i].a = {1}.points [i] [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}points [i].b = {1}.points [i] [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t\t{0}{2}points [i].c = {1}.points [i] [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Quaternion":
case "NQuaterniond":
case "Quaterniond":
writer.WriteLine ("\t{0}{2}vector.a = {1}.vector [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}vector.b = {1}.vector [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}vector.c = {1}.vector [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}vector.d = {1}.vector [3];", managedVariable, nativeVariable, accessor);
break;
case "MPSImageHistogramInfo":
writer.WriteLine ("\t{0}{2}numberOfHistogramEntries = {1}.numberOfHistogramEntries;", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}histogramForAlpha = {1}.histogramForAlpha;", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minPixelValue.a = {1}.minPixelValue [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minPixelValue.b = {1}.minPixelValue [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minPixelValue.c = {1}.minPixelValue [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minPixelValue.d = {1}.minPixelValue [3];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxPixelValue.a = {1}.maxPixelValue [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxPixelValue.b = {1}.maxPixelValue [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxPixelValue.c = {1}.maxPixelValue [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maxPixelValue.d = {1}.maxPixelValue [3];", managedVariable, nativeVariable, accessor);
// this is not exposed (under normal circumstance) to managed code - but if something gets wrong it won't be random data
writer.WriteLine ("\tmemset ({0}{1}dummy, 0, sizeof ({0}{1}dummy));", managedVariable, accessor);
break;
case "MDLVoxelIndexExtent":
case "MDLVoxelIndexExtent2":
writer.WriteLine ("\t{0}{2}minimumExtent.a = {1}.minimumExtent [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minimumExtent.b = {1}.minimumExtent [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minimumExtent.c = {1}.minimumExtent [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}minimumExtent.d = {1}.minimumExtent [3];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maximumExtent.a = {1}.maximumExtent [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maximumExtent.b = {1}.maximumExtent [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maximumExtent.c = {1}.maximumExtent [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}maximumExtent.d = {1}.maximumExtent [3];", managedVariable, nativeVariable, accessor);
break;
case "MPSAxisAlignedBoundingBox":
writer.WriteLine ("\t{0}{2}max.a = {1}.max [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}max.b = {1}.max [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}max.c = {1}.max [2];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}min.a = {1}.min [0];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}min.b = {1}.min [1];", managedVariable, nativeVariable, accessor);
writer.WriteLine ("\t{0}{2}min.c = {1}.min [2];", managedVariable, nativeVariable, accessor);
break;
default:
throw new NotImplementedException (string.Format ("MarshalToManaged for: NativeType: {0} ManagedType: {1}", type.NativeType, type.ManagedType));
}
}
static void MarshalToNative (StringWriter writer, TypeData type, string nativeVariable, string managedVariable, bool isRef)
{
var accessor = isRef ? "->" : ".";
switch (type.ManagedType) {
case "NVector2d":
case "Vector2d":
case "NVector2i":
case "Vector2i":
case "Vector2":
writer.WriteLine ("\t{0} [0] = {1}{2}a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [1] = {1}{2}b;", nativeVariable, managedVariable, accessor);
break;
case "Vector3d":
case "NVector3i":
case "Vector3i":
case "Vector3":
case "NVector3":
case "NVector3d":
writer.WriteLine ("\t{0} [0] = {1}{2}a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [1] = {1}{2}b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [2] = {1}{2}c;", nativeVariable, managedVariable, accessor);
break;
case "NVector4d":
case "Vector4d":
case "NVector4i":
case "Vector4i":
case "Vector4":
if (type.NativeType == "vector_float3") {
writer.WriteLine ("\t{0} [0] = {1}{2}a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [1] = {1}{2}b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [2] = {1}{2}c;", nativeVariable, managedVariable, accessor);
} else if (type.NativeType == "vector_float4" || type.NativeType == "vector_int4" || type.NativeType == "vector_double4") {
writer.WriteLine ("\t{0} [0] = {1}{2}a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [1] = {1}{2}b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [2] = {1}{2}c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0} [3] = {1}{2}d;", nativeVariable, managedVariable, accessor);
} else {
goto default;
}
break;
case "Matrix2":
case "NMatrix2":
writer.WriteLine ("\tfor (int i = 0; i < 2; i++) {");
writer.WriteLine ("\t\t{0}.columns [i][0] = {1}{2}columns [i].a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][1] = {1}{2}columns [i].b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Matrix3":
case "RMatrix3":
case "NMatrix3":
writer.WriteLine ("\tfor (int i = 0; i < 3; i++) {");
writer.WriteLine ("\t\t{0}.columns [i][0] = {1}{2}columns [i].a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][1] = {1}{2}columns [i].b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][2] = {1}{2}columns [i].c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Matrix4":
case "Matrix4x4":
case "NMatrix4":
case "NMatrix4d":
writer.WriteLine ("\tfor (int i = 0; i < 4; i++) {");
writer.WriteLine ("\t\t{0}.columns [i][0] = {1}{2}columns [i].a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][1] = {1}{2}columns [i].b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][2] = {1}{2}columns [i].c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][3] = {1}{2}columns [i].d;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t}");
break;
case "NMatrix4x3":
writer.WriteLine ("\tfor (int i = 0; i < 4; i++) {");
writer.WriteLine ("\t\t{0}.columns [i][0] = {1}{2}columns [i].a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][1] = {1}{2}columns [i].b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.columns [i][2] = {1}{2}columns [i].c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t}");
break;
case "MDLAxisAlignedBoundingBox":
writer.WriteLine ("\t{0}.maxBounds [0] = {1}{2}maxBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxBounds [1] = {1}{2}maxBounds.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxBounds [2] = {1}{2}maxBounds.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [0] = {1}{2}minBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [1] = {1}{2}minBounds.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [2] = {1}{2}minBounds.c;", nativeVariable, managedVariable, accessor);
break;
case "GKBox":
writer.WriteLine ("\t{0}.maxBounds [0] = {1}{2}maxBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxBounds [1] = {1}{2}maxBounds.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxBounds [2] = {1}{2}maxBounds.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [0] = {1}{2}minBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [1] = {1}{2}minBounds.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [2] = {1}{2}minBounds.c;", nativeVariable, managedVariable, accessor);
break;
case "GKQuad":
writer.WriteLine ("\t{0}.maxBounds [0] = {1}{2}maxBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxBounds [1] = {1}{2}maxBounds.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [0] = {1}{2}minBounds.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minBounds [1] = {1}{2}minBounds.b;", nativeVariable, managedVariable, accessor);
break;
case "GKTriangle":
writer.WriteLine ("\tfor (int i = 0; i < 3; i++) {");
writer.WriteLine ("\t\t{0}.points [i][0] = {1}{2}points [i].a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.points [i][1] = {1}{2}points [i].b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t\t{0}.points [i][2] = {1}{2}points [i].c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t}");
break;
case "Quaternion":
case "NQuaterniond":
case "Quaterniond":
writer.WriteLine ("\t{0}.vector [0] = {1}{2}vector.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.vector [1] = {1}{2}vector.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.vector [2] = {1}{2}vector.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.vector [3] = {1}{2}vector.d;", nativeVariable, managedVariable, accessor);
break;
case "MPSImageHistogramInfo":
writer.WriteLine ("\t{0}.numberOfHistogramEntries = {1}{2}numberOfHistogramEntries;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.histogramForAlpha = {1}{2}histogramForAlpha;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minPixelValue [0] = {1}{2}minPixelValue.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minPixelValue [1] = {1}{2}minPixelValue.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minPixelValue [2] = {1}{2}minPixelValue.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minPixelValue [3] = {1}{2}minPixelValue.d;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxPixelValue [0] = {1}{2}maxPixelValue.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxPixelValue [1] = {1}{2}maxPixelValue.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxPixelValue [2] = {1}{2}maxPixelValue.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maxPixelValue [3] = {1}{2}maxPixelValue.d;", nativeVariable, managedVariable, accessor);
break;
case "MDLVoxelIndexExtent":
case "MDLVoxelIndexExtent2":
writer.WriteLine ("\t{0}.minimumExtent [0] = {1}{2}minimumExtent.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minimumExtent [1] = {1}{2}minimumExtent.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minimumExtent [2] = {1}{2}minimumExtent.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.minimumExtent [3] = {1}{2}minimumExtent.d;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maximumExtent [0] = {1}{2}maximumExtent.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maximumExtent [1] = {1}{2}maximumExtent.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maximumExtent [2] = {1}{2}maximumExtent.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.maximumExtent [3] = {1}{2}maximumExtent.d;", nativeVariable, managedVariable, accessor);
break;
case "MPSAxisAlignedBoundingBox":
writer.WriteLine ("\t{0}.max [0] = {1}{2}max.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.max [1] = {1}{2}max.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.max [2] = {1}{2}max.c;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.min [0] = {1}{2}min.a;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.min [1] = {1}{2}min.b;", nativeVariable, managedVariable, accessor);
writer.WriteLine ("\t{0}.min [2] = {1}{2}min.c;", nativeVariable, managedVariable, accessor);
break;
default:
throw new NotImplementedException (string.Format ("MarshalToNative for: NativeType: {0} ManagedType: {1}", type.NativeType, type.ManagedType));
}
}
static string GetFuncName (FunctionData func, string overload)
{
var funcName = new StringBuilder ();
funcName.Append ("xamarin_");
funcName.Append (func.Prefix);
if (func.ReturnType is not null) {
funcName.Append (GetTypeNameForSignature (func.ReturnType.ManagedType));
} else {
funcName.Append ("void");
}
funcName.Append ("_").Append (overload);
if (func.Parameters is not null) {
for (int i = 0; i < func.Parameters.Length; i++) {
funcName.Append ("_");
if (func.Parameters [i].IsRef)
funcName.Append ("ref_");
funcName.Append (GetTypeNameForSignature (func.Parameters [i].TypeData.ManagedType));
}
}
if (func.MarshalExceptions)
funcName.Append ("_exception");
return funcName.ToString ();
}
static void WriteParametersMarshal (StringWriter writer, ParameterData []? ps)
{
if (ps is null)
return;
for (int i = 0; i < ps.Length; i++) {
var p = ps [i];
if (!p.TypeData.RequireMarshal)
continue;
writer.WriteLine ("\t{0} v{1};", p.TypeData.NativeType, i);
MarshalToNative (writer, p.TypeData, "v" + i.ToString (), "p" + i.ToString (), p.IsRef);
}
}
static void WriteParametersInvoke (StringWriter writer, ParameterData []? ps)
{
if (ps is null)
return;
for (int i = 0; i < ps.Length; i++) {
var p = ps [i];
writer.Write (", ");
if (p.IsRef && p.TypeData != Types.IntPtr)
writer.Write ("&");
if (p.TypeData.RequireMarshal) {
writer.Write ("v{0}", i);
} else {
writer.Write ("p{0}", i);
}
}
}
static void WriteParametersNativeDeclaration (StringWriter writer, ParameterData []? parameters, bool isTypedef, FunctionData func)
{
if (parameters is null)
return;
for (int i = 0; i < parameters.Length; i++) {
var p = parameters [i];
writer.Write (", ");
writer.Write (isTypedef ? p.TypeData.NativeType : p.TypeData.NativeWrapperType);
if (p.IsRef && p.TypeData != Types.IntPtr)
writer.Write ("*");
writer.Write (" ");
writer.Write (isTypedef ? "f" : "p");
writer.Write (i);
}
if (!isTypedef && func.MarshalExceptions)
writer.Write (", GCHandle *exception_gchandle");
}
static void WriteMessageStretSenderCode (StringWriter writer, TypeData type, bool isSuper)
{
var nonstret = isSuper ? "objc_msgSendSuper" : "objc_msgSend";
var stret = isSuper ? "objc_msgSendSuper_stret" : "objc_msgSend_stret";
writer.WriteLine ("#if __i386__");
writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsX86Stret ? stret : nonstret);
writer.WriteLine ("#elif __x86_64__");
writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsX64Stret ? stret : nonstret);
writer.WriteLine ("#elif __arm64__");
writer.WriteLine ("\tIMP msgSend = (IMP) {0};", nonstret);
writer.WriteLine ("#elif __arm__");
writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsARMStret ? stret : nonstret);
writer.WriteLine ("#else");
writer.WriteLine ("#error unknown architecture");
writer.WriteLine ("#endif");
}
static void WriteCatchHandler (StringWriter writer)
{
writer.WriteLine ("\t} @catch (NSException *e) {");
writer.WriteLine ("\t\txamarin_process_nsexception_using_mode (e, true, exception_gchandle);");
writer.WriteLine ("\t\treturn NULL;");
writer.WriteLine ("\t}");
}
static void WriteMarshalParametersToManaged (StringWriter writer, FunctionData func)
{
if (func.Parameters is null)
return;
for (int i = 0; i < func.Parameters.Length; i++) {
var p = func.Parameters [i];
if (!p.IsRef || !p.TypeData.RequireMarshal)
continue;
MarshalToManaged (writer, p.TypeData, $"v{i}", $"p{i}", true);
}
}
static void WriteMarshalReturnValue (StringWriter writer, FunctionData func, string indent, bool tmpReturnValue)
{
if (func.ReturnType is not null) {
if (func.ReturnType.RequireMarshal) {
// Marshal return value back
writer.WriteLine ("{0}{1} rvm;", indent, func.ReturnType.NativeWrapperType);
MarshalToManaged (writer, func.ReturnType, "rv", "rvm");
writer.WriteLine ("{0}return rvm;", indent);
} else if (tmpReturnValue) {
writer.WriteLine ("{0}return rv;", indent);
}
}
}
static void Write_objc_msgSend (StringWriter writer, FunctionData func)
{
var tmpReturnValue = func.ReturnType is not null && (func.ReturnType.RequireMarshal == true || func.Parameters?.Any ((v) => v.IsRef && v.TypeData.RequireMarshal) == true);
// func name
var overload = "objc_msgSend";
var funcName = GetFuncName (func, overload);
// typedef
writer.Write ("typedef {0} (*func_{1}) (id self, SEL sel", func.ReturnType is null ? "void" : func.ReturnType.NativeType, funcName.ToString ());
WriteParametersNativeDeclaration (writer, func.Parameters, true, func);
writer.WriteLine (");");
// declaration
writer.WriteLine (func.ReturnType is not null ? func.ReturnType.NativeWrapperType : "void");
writer.Write (funcName);
writer.Write (" (id self, SEL sel");
WriteParametersNativeDeclaration (writer, func.Parameters, false, func);
writer.WriteLine (")");
// body
writer.WriteLine ("{");
if (tmpReturnValue) {
writer.WriteLine ("\t{0} rv;", func.ReturnType!.NativeType);
}
// marshal managed parameters to native format
WriteParametersMarshal (writer, func.Parameters);
if (func.ReturnType is not null && func.ReturnType.IsAnyStret)
WriteMessageStretSenderCode (writer, func.ReturnType, false);
// @try
string indent = "\t";
if (func.MarshalExceptions) {
writer.WriteLine ("\t@try {");
indent = "\t\t";
}
// invoke
writer.Write (indent);
if (func.ReturnType is not null) {
if (tmpReturnValue) {
writer.Write ("rv = ");
} else {
writer.Write ("return ");
}
}
writer.Write ("((func_{0}) {1}) (self, sel", funcName, (func.ReturnType is not null && func.ReturnType.IsAnyStret) ? "msgSend" : overload);
WriteParametersInvoke (writer, func.Parameters);
writer.WriteLine (");");
WriteMarshalParametersToManaged (writer, func);
WriteMarshalReturnValue (writer, func, indent, tmpReturnValue);
// @catch
if (func.MarshalExceptions)
WriteCatchHandler (writer);
writer.WriteLine ("}");
writer.WriteLine ();
}
static void Write_objc_msgSendSuper (StringWriter writer, FunctionData func)
{
var tmpReturnValue = func.ReturnType is not null && (func.ReturnType.RequireMarshal == true || func.Parameters?.Any ((v) => v.IsRef && v.TypeData.RequireMarshal) == true);
// func name
var overload = "objc_msgSendSuper";
var funcName = GetFuncName (func, overload);
// typedef
writer.Write ("typedef {0} (*func_{1}) (struct objc_super *super, SEL sel", func.ReturnType is null ? "void" : func.ReturnType.NativeType, funcName.ToString ());
WriteParametersNativeDeclaration (writer, func.Parameters, true, func);
writer.WriteLine (");");
// declaration
writer.WriteLine (func.ReturnType is not null ? func.ReturnType.NativeWrapperType : "void");
writer.Write (funcName);
writer.Write (" (struct objc_super *super, SEL sel");
WriteParametersNativeDeclaration (writer, func.Parameters, false, func);
writer.WriteLine (")");
// body
writer.WriteLine ("{");
if (tmpReturnValue) {
writer.WriteLine ("\t{0} rv;", func.ReturnType!.NativeType);
}
// marshal managed parameters to native format
WriteParametersMarshal (writer, func.Parameters);
if (func.ReturnType is not null && func.ReturnType.IsAnyStret)
WriteMessageStretSenderCode (writer, func.ReturnType, true);
// @try
string indent = "\t";
if (func.MarshalExceptions) {
writer.WriteLine ("\t@try {");
indent = "\t\t";
}
// invoke
writer.Write (indent);
if (func.ReturnType is not null) {
if (tmpReturnValue) {
writer.Write ("rv = ");
} else {
writer.Write ("return ");
}
}
writer.Write ("((func_{0}) {1}) (super, sel", funcName, (func.ReturnType is not null && func.ReturnType.IsAnyStret) ? "msgSend" : overload);
WriteParametersInvoke (writer, func.Parameters);
writer.WriteLine (");");
WriteMarshalParametersToManaged (writer, func);
WriteMarshalReturnValue (writer, func, indent, tmpReturnValue);
// @catch
if (func.MarshalExceptions)
WriteCatchHandler (writer);
writer.WriteLine ("}");
writer.WriteLine ();
}
static void Write_objc_msgSend_stret (StringWriter writer, FunctionData func)
{
if (func.ReturnType is null)
throw new Exception (string.Format ("stret functions must have a return type: {0}", func.Comment));
// func name
var overload = "objc_msgSend_stret";
var funcName = GetFuncName (func, overload);
// typedef
writer.Write ("typedef {0} (*func_{1}) (id self, SEL sel", func.ReturnType.NativeType, funcName.ToString ());
WriteParametersNativeDeclaration (writer, func.Parameters, true, func);
writer.WriteLine (");");
// declaration
writer.WriteLine ("void");
writer.Write (funcName);
writer.Write (" ({0} *stret_rv, id self, SEL sel", func.ReturnType.NativeWrapperType);
WriteParametersNativeDeclaration (writer, func.Parameters, false, func);
writer.WriteLine (")");
// body
writer.WriteLine ("{");
if (func.ReturnType.RequireMarshal)
writer.WriteLine ("\t{0} rv;", func.ReturnType.NativeType);
// marshal managed parameters to native format
WriteParametersMarshal (writer, func.Parameters);
// @try
string indent = "\t";
if (func.MarshalExceptions) {
writer.WriteLine ("\t@try {");
indent = "\t\t";
}
if (func.ReturnType.IsAnyStret)
WriteMessageStretSenderCode (writer, func.ReturnType, false);
// invoke
writer.Write (indent);
if (func.ReturnType.RequireMarshal) {
writer.Write ("rv = ");
} else {
writer.Write ("*stret_rv = ");
}
writer.Write ("((func_{0}) {1}) (self, sel", funcName, func.ReturnType.IsAnyStret ? "msgSend" : overload.Replace ("_stret", ""));
WriteParametersInvoke (writer, func.Parameters);
writer.WriteLine (");");
WriteMarshalParametersToManaged (writer, func);
if (func.ReturnType.RequireMarshal) {
// Marshal return value back
MarshalToManaged (writer, func.ReturnType, "rv", "(*stret_rv)");
}
// @catch
if (func.MarshalExceptions)
WriteCatchHandler (writer);
writer.WriteLine ("}");
writer.WriteLine ();
}
static void Write_objc_msgSendSuper_stret (StringWriter writer, FunctionData func)
{
if (func.ReturnType is null)
throw new Exception (string.Format ("stret functions must have a return type: {0}", func.Comment));
// func name
var overload = "objc_msgSendSuper_stret";
var funcName = GetFuncName (func, overload);
// typedef
writer.Write ("typedef {0} (*func_{1}) (struct objc_super *super, SEL sel", func.ReturnType.NativeType, funcName.ToString ());
WriteParametersNativeDeclaration (writer, func.Parameters, true, func);
writer.WriteLine (");");
// declaration
writer.WriteLine ("void");
writer.Write (funcName);
writer.Write (" ({0} *stret_rv, struct objc_super *super, SEL sel", func.ReturnType.NativeWrapperType);
WriteParametersNativeDeclaration (writer, func.Parameters, false, func);
writer.WriteLine (")");
// body
writer.WriteLine ("{");
if (func.ReturnType.RequireMarshal)
writer.WriteLine ("\t{0} rv;", func.ReturnType.NativeType);
// marshal managed parameters to native format
WriteParametersMarshal (writer, func.Parameters);
if (func.ReturnType.IsAnyStret)
WriteMessageStretSenderCode (writer, func.ReturnType, true);
// @try
string indent = "\t";
if (func.MarshalExceptions) {
writer.WriteLine ("\t@try {");
indent = "\t\t";
}
// invoke
writer.Write (indent);
if (func.ReturnType.RequireMarshal) {
writer.Write ("rv = ");
} else {
writer.Write ("*stret_rv = ");
}
writer.Write ("((func_{0}) {1}) (super, sel", funcName, func.ReturnType.IsAnyStret ? "msgSend" : overload.Replace ("_stret", ""));
WriteParametersInvoke (writer, func.Parameters);
writer.WriteLine (");");
WriteMarshalParametersToManaged (writer, func);
if (func.ReturnType.RequireMarshal) {
// Marshal return value back
MarshalToManaged (writer, func.ReturnType, "rv", "(*stret_rv)");
}
// @catch
if (func.MarshalExceptions)
WriteCatchHandler (writer);
writer.WriteLine ("}");
writer.WriteLine ();
}
public static class Types {
public static bool IsDotNet;
public static TypeData Vector2 = new TypeData {
ManagedType = "Vector2",
NativeType = "vector_float2",
NativeWrapperType = "struct Vector2f",
RequireMarshal = true,
IsX86Stret = true,
};
public static TypeData Vector3 = new TypeData {
ManagedType = "Vector3",
NativeType = "vector_float3",
NativeWrapperType = "struct Vector3f",
RequireMarshal = true,
};
public static TypeData NVector3 = new TypeData {
ManagedType = "NVector3",
NativeType = "vector_float3",
NativeWrapperType = "struct Vector4f", // Yes, Vector4f, since NVector3 has 4 floats.
RequireMarshal = true,
};
public static TypeData Vector4 = new TypeData {
ManagedType = "Vector4",
NativeType = "vector_float4",
NativeWrapperType = "struct Vector4f",
RequireMarshal = true,
};
public static TypeData Vector3As4 = new TypeData {
ManagedType = "Vector4",
NativeType = "vector_float3",
NativeWrapperType = "struct Vector4f",
RequireMarshal = true,
};
public static TypeData Vector2i { get => IsDotNet ? Types.NVector2i : Types.OpenTK_Vector2i; }
public static TypeData OpenTK_Vector2i = new TypeData {
ManagedType = "Vector2i",
NativeType = "vector_int2",
NativeWrapperType = "struct Vector2i",
RequireMarshal = true,
IsX86Stret = true,
};
public static TypeData NVector2i = new TypeData {
ManagedType = "NVector2i",
NativeType = "vector_int2",
NativeWrapperType = "struct Vector2i",
RequireMarshal = true,
IsX86Stret = true,
};
public static TypeData Vector3i { get => IsDotNet ? Types.NVector3i : Types.OpenTK_Vector3i; }
public static TypeData OpenTK_Vector3i = new TypeData {
ManagedType = "Vector3i",
NativeType = "vector_int3",
NativeWrapperType = "struct Vector3i",
RequireMarshal = true,
};
public static TypeData NVector3i = new TypeData {
ManagedType = "NVector3i",
NativeType = "vector_int3",
NativeWrapperType = "struct Vector3i",
RequireMarshal = true,
};
public static TypeData Vector4i { get => IsDotNet ? Types.NVector4i : Types.OpenTK_Vector4i; }
public static TypeData OpenTK_Vector4i = new TypeData {
ManagedType = "Vector4i",
NativeType = "vector_int4",
NativeWrapperType = "struct Vector4i",
RequireMarshal = true,
};
public static TypeData NVector4i = new TypeData {
ManagedType = "NVector4i",
NativeType = "vector_int4",
NativeWrapperType = "struct Vector4i",
RequireMarshal = true,
};
public static TypeData Vector2d { get => IsDotNet ? NVector2d : OpenTK_Vector2d; }
public static TypeData OpenTK_Vector2d = new TypeData {
ManagedType = "Vector2d",
NativeType = "vector_double2",
NativeWrapperType = "struct Vector2d",
RequireMarshal = true
};
public static TypeData NVector2d = new TypeData {
ManagedType = "NVector2d",
NativeType = "vector_double2",
NativeWrapperType = "struct Vector2d",
RequireMarshal = true
};
public static TypeData Vector3d = new TypeData {
ManagedType = "Vector3d",
NativeType = "vector_double3",
NativeWrapperType = "struct Vector3d",
RequireMarshal = true,
};
public static TypeData NVector3d = new TypeData {
ManagedType = "NVector3d",
NativeType = "vector_double3",
NativeWrapperType = "struct Vector4d", // Yes, Vector4d, since NVector3d has 4 doubles.
RequireMarshal = true,
};
public static TypeData Vector4d { get => IsDotNet ? Types.NVector4d : Types.OpenTK_Vector4d; }
public static TypeData OpenTK_Vector4d = new TypeData {
ManagedType = "Vector4d",
NativeType = "vector_double4",
NativeWrapperType = "struct Vector4d",
RequireMarshal = true,
};
public static TypeData NVector4d = new TypeData {
ManagedType = "NVector4d",
NativeType = "vector_double4",
NativeWrapperType = "struct Vector4d",
RequireMarshal = true,
};
public static TypeData Matrix2f = new TypeData {
ManagedType = "Matrix2",
NativeType = "matrix_float2x2",
NativeWrapperType = "struct Matrix2f",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = false,
};
public static TypeData NMatrix2 = new TypeData {
ManagedType = "NMatrix2",
NativeType = "matrix_float2x2",
NativeWrapperType = "struct NMatrix2",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = false,
};
public static TypeData Matrix3f { get => IsDotNet ? Types.RMatrix3f : Types.OpenTK_Matrix3f; }
public static TypeData OpenTK_Matrix3f = new TypeData {
ManagedType = "Matrix3",
NativeType = "matrix_float3x3",
NativeWrapperType = "struct Matrix3f",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData RMatrix3f = new TypeData {
ManagedType = "RMatrix3",
NativeType = "matrix_float3x3",
NativeWrapperType = "struct Matrix3f",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData NMatrix3 = new TypeData {
ManagedType = "NMatrix3",
NativeType = "matrix_float3x3",
NativeWrapperType = "struct NMatrix3",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData Matrix4f { get => IsDotNet ? Types.Numerics_Matrix4f : Types.OpenTK_Matrix4f; }
public static TypeData OpenTK_Matrix4f = new TypeData {
ManagedType = "Matrix4",
NativeType = "matrix_float4x4",
NativeWrapperType = "struct Matrix4f",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData Numerics_Matrix4f = new TypeData {
ManagedType = "Matrix4x4",
NativeType = "matrix_float4x4",
NativeWrapperType = "struct Matrix4f",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData NMatrix4 = new TypeData {
ManagedType = "NMatrix4",
NativeType = "matrix_float4x4",
NativeWrapperType = "struct NMatrix4",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData NMatrix4d = new TypeData {
ManagedType = "NMatrix4d",
NativeType = "matrix_double4x4",
NativeWrapperType = "struct NMatrix4d",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData NMatrix4x3 = new TypeData {
ManagedType = "NMatrix4x3",
NativeType = "matrix_float4x3",
NativeWrapperType = "struct NMatrix4x3",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData Double = new TypeData {
ManagedType = "Double",
NativeType = "double",
NativeWrapperType = "double",
RequireMarshal = false,
};
public static TypeData IntPtr = new TypeData {
ManagedType = "IntPtr",
NativeType = "void *",
NativeWrapperType = "void *",
RequireMarshal = false,
};
public static TypeData NativeHandleType { get => IsDotNet ? NativeHandle : IntPtr; }
public static TypeData NativeHandle = new TypeData {
ManagedType = "NativeHandle",
NativeType = "void *",
NativeWrapperType = "void *",
RequireMarshal = false,
};
public static TypeData UIntPtr = new TypeData {
ManagedType = "UIntPtr",
NativeType = "void *",
NativeWrapperType = "void *",
RequireMarshal = false,
};
public static TypeData Float = new TypeData {
ManagedType = "float",
NativeType = "float",
NativeWrapperType = "float",
RequireMarshal = false,
};
public static TypeData Int32 = new TypeData {
ManagedType = "int",
NativeType = "int",
NativeWrapperType = "int",
RequireMarshal = false,
};
public static TypeData UInt32 = new TypeData {
ManagedType = "UInt32",
NativeType = "uint32_t",
NativeWrapperType = "uint32_t",
RequireMarshal = false,
};
public static TypeData Int64 = new TypeData {
ManagedType = "Int64",
NativeType = "int64_t",
NativeWrapperType = "int64_t",
RequireMarshal = false,
};
public static TypeData UInt64 = new TypeData {
ManagedType = "UInt64",
NativeType = "uint64_t",
NativeWrapperType = "uint64_t",
RequireMarshal = false,
};
public static TypeData NInt = new TypeData {
ManagedType = "IntPtr",
NativeType = "void *",
NativeWrapperType = "void *",
RequireMarshal = false,
IsNativeType = true,
Bit32Type = Int32,
Bit64Type = Int64,
};
public static TypeData NUInt = new TypeData {
ManagedType = "UIntPtr",
NativeType = "void *",
NativeWrapperType = "void *",
RequireMarshal = false,
IsNativeType = true,
Bit32Type = UInt32,
Bit64Type = UInt64,
};
public static TypeData NFloat = new TypeData {
ManagedType = "nfloat",
NativeType = "xm_nfloat_t",
NativeWrapperType = "xm_nfloat_t",
RequireMarshal = false,
IsNativeType = true,
Bit32Type = Float,
Bit64Type = Double,
};
public static TypeData Bool = new TypeData {
ManagedType = "bool",
NativeType = "bool",
NativeWrapperType = "bool",
RequireMarshal = false,
};
public static TypeData MDLAxisAlignedBoundingBox = new TypeData {
ManagedType = "MDLAxisAlignedBoundingBox",
NativeType = "MDLAxisAlignedBoundingBox",
NativeWrapperType = "MDLAxisAlignedBoundingBoxWrapper",
RequireMarshal = true,
IsX86Stret = true,
IsX64Stret = true,
IsARMStret = true,
};
public static TypeData GKBox = new TypeData {
ManagedType = "GKBox",
NativeType = "GKBox",
NativeWrapperType = "struct GKBoxWrapper",
RequireMarshal = true,
IsX86Stret = true,
IsX64Stret = true,
IsARMStret = true,
};
public static TypeData GKQuad = new TypeData {
ManagedType = "GKQuad",
NativeType = "GKQuad",
NativeWrapperType = "struct GKQuadWrapper",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = false,
};
public static TypeData GKTriangle = new TypeData {
ManagedType = "GKTriangle",
NativeType = "GKTriangle",
NativeWrapperType = "struct GKTriangleWrapper",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData CGSize = new TypeData {
ManagedType = "CGSize",
NativeType = "CGSize",
NativeWrapperType = "CGSize",
RequireMarshal = false,
};
public static TypeData CGPoint = new TypeData {
ManagedType = "CGPoint",
NativeType = "CGPoint",
NativeWrapperType = "CGPoint",
RequireMarshal = false,
};
public static TypeData QuatF = new TypeData {
ManagedType = "Quaternion",
NativeType = "simd_quatf",
NativeWrapperType = "struct QuatF",
RequireMarshal = true,
};
public static TypeData QuatD { get => IsDotNet ? Types.NQuaterniond : Types.OpenTK_QuatD; }
public static TypeData OpenTK_QuatD = new TypeData {
ManagedType = "Quaterniond",
NativeType = "simd_quatd",
NativeWrapperType = "struct QuatD",
RequireMarshal = true,
IsX64Stret = true,
};
public static TypeData NQuaterniond = new TypeData {
ManagedType = "NQuaterniond",
NativeType = "simd_quatd",
NativeWrapperType = "struct QuatD",
RequireMarshal = true,
IsX64Stret = true,
};
public static TypeData MPSImageHistogramInfo = new TypeData {
ManagedType = "MPSImageHistogramInfo",
NativeType = "MPSImageHistogramInfo",
NativeWrapperType = "struct MPSImageHistogramInfoWrapper",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData MDLVoxelIndexExtent { get => IsDotNet ? Types.MDLVoxelIndexExtent_DotNet : Types.MDLVoxelIndexExtent2; }
public static TypeData MDLVoxelIndexExtent_DotNet = new TypeData {
ManagedType = "MDLVoxelIndexExtent",
NativeType = "MDLVoxelIndexExtent",
NativeWrapperType = "struct MDLVoxelIndexExtentWrapper",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData MDLVoxelIndexExtent2 = new TypeData {
ManagedType = "MDLVoxelIndexExtent2",
NativeType = "MDLVoxelIndexExtent",
NativeWrapperType = "struct MDLVoxelIndexExtentWrapper",
RequireMarshal = true,
IsARMStret = true,
IsX86Stret = true,
IsX64Stret = true,
};
public static TypeData MPSAxisAlignedBoundingBox = new TypeData {
ManagedType = "MPSAxisAlignedBoundingBox",
NativeType = "MPSAxisAlignedBoundingBox",
NativeWrapperType = "struct MPSAxisAlignedBoundingBoxWrapper",
RequireMarshal = true,
IsX64Stret = true,
};
}
}
enum Variants {
msgSend = 1,
msgSend_stret = 2,
msgSendSuper = 4,
msgSendSuper_stret = 8,
All = msgSend | msgSend_stret | msgSendSuper | msgSendSuper_stret,
NonStret = msgSend | msgSendSuper,
}
class TypeData {
public string ManagedType = string.Empty;
public string NativeWrapperType = string.Empty;
public string NativeType = string.Empty;
public bool RequireMarshal;
public bool IsX86Stret;
#pragma warning disable 649
// warning 649: Field `Xamarin.BindingMethods.Generator.TypeData.IsX64Stret' is never assigned to, and will always have its default value `false'
// this warning will disappear if we ever get a type that requires stret on these platforms, so just ignore it.
public bool IsX64Stret;
public bool IsARMStret;
#pragma warning restore 649
public bool IsAnyStret { get { return IsX86Stret || IsX64Stret || IsARMStret; } }
public bool IsNativeType;
public TypeData? Bit32Type;
public TypeData? Bit64Type;
public TypeData AsSpecificNativeType (bool as32bit)
{
if (as32bit)
return Bit32Type ?? this;
return Bit64Type ?? this;
}
}
class ParameterData {
TypeData? typeData;
public TypeData TypeData { get => typeData!; set => typeData = value; }
public bool IsRef;
}
class FunctionData {
public string? Comment;
public string Prefix = string.Empty;
// Variants is a [Flags] enum, specifying which of the objc_msgSend variants
// should be generated. You'll usually use "All", which will generate all 4,
// or "NonStret", which will just generate objc_msgSend and objc_msgSendSuper.
public Variants Variants;
// The return type of the function. Use null for void.
public TypeData? ReturnType;
// The parameters. Use null for void.
public ParameterData []? Parameters;
public bool MarshalExceptions;
public bool HasNativeType {
get {
if (ReturnType is not null && ReturnType.IsNativeType)
return true;
if (Parameters is not null) {
foreach (var pd in Parameters) {
if (pd.TypeData.IsNativeType)
return true;
}
}
return false;
}
}
public FunctionData CloneAsResolvedNativeType (bool as32bit)
{
var rv = new FunctionData ();
rv.Comment = Comment + " cloned for " + (as32bit ? "32bit" : "64bit");
rv.Prefix = Prefix;
rv.Variants = Variants;
if (ReturnType is not null)
rv.ReturnType = ReturnType.AsSpecificNativeType (as32bit);
if (Parameters is not null) {
rv.Parameters = new ParameterData [Parameters.Length];
for (int i = 0; i < Parameters.Length; i++) {
rv.Parameters [i] = new ParameterData ();
rv.Parameters [i].TypeData = Parameters [i].TypeData.AsSpecificNativeType (as32bit);
rv.Parameters [i].IsRef = Parameters [i].IsRef;
}
}
rv.MarshalExceptions = MarshalExceptions;
return rv;
}
}
}