diff options
author | Ignacio Etcheverry <ignalfonsore@gmail.com> | 2019-12-28 19:12:32 +0100 |
---|---|---|
committer | Ignacio Etcheverry <ignalfonsore@gmail.com> | 2019-12-28 20:48:55 +0100 |
commit | 86274b9fc9e63c0eb6112bf4d87d67dd97fb0b86 (patch) | |
tree | 36b9c9909da20b9c7f0310a506542474bf2d1cba /modules/mono/glue/Managed/Files/Array.cs | |
parent | 318c69351624f7794c51b5385d252af397c0404a (diff) | |
download | redot-engine-86274b9fc9e63c0eb6112bf4d87d67dd97fb0b86.tar.gz |
Mono/C#: Re-structure API solution and GodotTools post-build target
Previously we had a placeholder solution called 'Managed' to benefit from
tooling while editing the a part of the C# API.
Later the bindings generator would create the final 'GodotSharp' solution
including these C# files as well as the auto-generated C# API.
Now we replaced the 'Managed' solution with the final 'GodotSharp' solution
which is no longer auto-generated, and the bindings generator only takes
care of the auto-generated C# API.
This has the following benefits:
- It's less confusing as there will no longer be two versions of the same file
(the original and a generated copy of it). Now there's only one.
- We no longer need placeholder for auto-generated API classes, like Node or
Resource. We used them for benefiting from tooling. Now we can just use the
auto-generated API itself.
- Simplifies the build system and bindings generator. Removed lot of code
that is not needed anymore.
Also added a post-build target to the GodotTools project to copy the output to
the data dir. This makes it easy to iterate when doing changes to GodotTools,
as SCons doesn't have to be executed anymore just to copy these new files.
Diffstat (limited to 'modules/mono/glue/Managed/Files/Array.cs')
-rw-r--r-- | modules/mono/glue/Managed/Files/Array.cs | 380 |
1 files changed, 0 insertions, 380 deletions
diff --git a/modules/mono/glue/Managed/Files/Array.cs b/modules/mono/glue/Managed/Files/Array.cs deleted file mode 100644 index aba1065498..0000000000 --- a/modules/mono/glue/Managed/Files/Array.cs +++ /dev/null @@ -1,380 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Godot.Collections -{ - class ArraySafeHandle : SafeHandle - { - public ArraySafeHandle(IntPtr handle) : base(IntPtr.Zero, true) - { - this.handle = handle; - } - - public override bool IsInvalid - { - get - { - return handle == IntPtr.Zero; - } - } - - protected override bool ReleaseHandle() - { - Array.godot_icall_Array_Dtor(handle); - return true; - } - } - - public class Array : IList, IDisposable - { - ArraySafeHandle safeHandle; - bool disposed = false; - - public Array() - { - safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor()); - } - - public Array(IEnumerable collection) : this() - { - if (collection == null) - throw new NullReferenceException($"Parameter '{nameof(collection)} cannot be null.'"); - - MarshalUtils.EnumerableToArray(collection, GetPtr()); - } - - internal Array(ArraySafeHandle handle) - { - safeHandle = handle; - } - - internal Array(IntPtr handle) - { - safeHandle = new ArraySafeHandle(handle); - } - - internal IntPtr GetPtr() - { - if (disposed) - throw new ObjectDisposedException(GetType().FullName); - - return safeHandle.DangerousGetHandle(); - } - - public Array Duplicate(bool deep = false) - { - return new Array(godot_icall_Array_Duplicate(GetPtr(), deep)); - } - - public Error Resize(int newSize) - { - return godot_icall_Array_Resize(GetPtr(), newSize); - } - - // IDisposable - - public void Dispose() - { - if (disposed) - return; - - if (safeHandle != null) - { - safeHandle.Dispose(); - safeHandle = null; - } - - disposed = true; - } - - // IList - - public bool IsReadOnly => false; - - public bool IsFixedSize => false; - - public object this[int index] - { - get => godot_icall_Array_At(GetPtr(), index); - set => godot_icall_Array_SetAt(GetPtr(), index, value); - } - - public int Add(object value) => godot_icall_Array_Add(GetPtr(), value); - - public bool Contains(object value) => godot_icall_Array_Contains(GetPtr(), value); - - public void Clear() => godot_icall_Array_Clear(GetPtr()); - - public int IndexOf(object value) => godot_icall_Array_IndexOf(GetPtr(), value); - - public void Insert(int index, object value) => godot_icall_Array_Insert(GetPtr(), index, value); - - public void Remove(object value) => godot_icall_Array_Remove(GetPtr(), value); - - public void RemoveAt(int index) => godot_icall_Array_RemoveAt(GetPtr(), index); - - // ICollection - - public int Count => godot_icall_Array_Count(GetPtr()); - - public object SyncRoot => this; - - public bool IsSynchronized => false; - - public void CopyTo(System.Array array, int index) - { - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (index < 0) - throw new ArgumentOutOfRangeException(nameof(index), "Number was less than the array's lower bound in the first dimension."); - - // Internal call may throw ArgumentException - godot_icall_Array_CopyTo(GetPtr(), array, index); - } - - // IEnumerable - - public IEnumerator GetEnumerator() - { - int count = Count; - - for (int i = 0; i < count; i++) - { - yield return this[i]; - } - } - - public override string ToString() - { - return godot_icall_Array_ToString(GetPtr()); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Array_Ctor(); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Dtor(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Array_At(IntPtr ptr, int index); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Array_At_Generic(IntPtr ptr, int index, int elemTypeEncoding, IntPtr elemTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_SetAt(IntPtr ptr, int index, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_Count(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_Add(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Clear(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Array_Contains(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_CopyTo(IntPtr ptr, System.Array array, int arrayIndex); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Array_Duplicate(IntPtr ptr, bool deep); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_IndexOf(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Insert(IntPtr ptr, int index, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Array_Remove(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_RemoveAt(IntPtr ptr, int index); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static Error godot_icall_Array_Resize(IntPtr ptr, int newSize); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Generic_GetElementTypeInfo(Type elemType, out int elemTypeEncoding, out IntPtr elemTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_Array_ToString(IntPtr ptr); - } - - public class Array<T> : IList<T>, ICollection<T>, IEnumerable<T> - { - Array objectArray; - - internal static int elemTypeEncoding; - internal static IntPtr elemTypeClass; - - static Array() - { - Array.godot_icall_Array_Generic_GetElementTypeInfo(typeof(T), out elemTypeEncoding, out elemTypeClass); - } - - public Array() - { - objectArray = new Array(); - } - - public Array(IEnumerable<T> collection) - { - if (collection == null) - throw new NullReferenceException($"Parameter '{nameof(collection)} cannot be null.'"); - - objectArray = new Array(collection); - } - - public Array(Array array) - { - objectArray = array; - } - - internal Array(IntPtr handle) - { - objectArray = new Array(handle); - } - - internal Array(ArraySafeHandle handle) - { - objectArray = new Array(handle); - } - - internal IntPtr GetPtr() - { - return objectArray.GetPtr(); - } - - public static explicit operator Array(Array<T> from) - { - return from.objectArray; - } - - public Array<T> Duplicate(bool deep = false) - { - return new Array<T>(objectArray.Duplicate(deep)); - } - - public Error Resize(int newSize) - { - return objectArray.Resize(newSize); - } - - // IList<T> - - public T this[int index] - { - get - { - return (T)Array.godot_icall_Array_At_Generic(GetPtr(), index, elemTypeEncoding, elemTypeClass); - } - set - { - objectArray[index] = value; - } - } - - public int IndexOf(T item) - { - return objectArray.IndexOf(item); - } - - public void Insert(int index, T item) - { - objectArray.Insert(index, item); - } - - public void RemoveAt(int index) - { - objectArray.RemoveAt(index); - } - - // ICollection<T> - - public int Count - { - get - { - return objectArray.Count; - } - } - - public bool IsReadOnly - { - get - { - return objectArray.IsReadOnly; - } - } - - public void Add(T item) - { - objectArray.Add(item); - } - - public void Clear() - { - objectArray.Clear(); - } - - public bool Contains(T item) - { - return objectArray.Contains(item); - } - - public void CopyTo(T[] array, int arrayIndex) - { - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (arrayIndex < 0) - throw new ArgumentOutOfRangeException(nameof(arrayIndex), "Number was less than the array's lower bound in the first dimension."); - - // TODO This may be quite slow because every element access is an internal call. - // It could be moved entirely to an internal call if we find out how to do the cast there. - - int count = objectArray.Count; - - if (array.Length < (arrayIndex + count)) - throw new ArgumentException("Destination array was not long enough. Check destIndex and length, and the array's lower bounds."); - - for (int i = 0; i < count; i++) - { - array[arrayIndex] = (T)this[i]; - arrayIndex++; - } - } - - public bool Remove(T item) - { - return Array.godot_icall_Array_Remove(GetPtr(), item); - } - - // IEnumerable<T> - - public IEnumerator<T> GetEnumerator() - { - int count = objectArray.Count; - - for (int i = 0; i < count; i++) - { - yield return (T)this[i]; - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public override string ToString() => objectArray.ToString(); - } -} |