Browse Source

Merge pull request #26065 from neikeq/csharp-fix-gd-range

C#: Make GD.Range return IEnumerable instead of array
Ignacio Etcheverry 6 years ago
parent
commit
aa5b99821b

+ 16 - 49
modules/mono/glue/Managed/Files/GD.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections.Generic;
 using System.Runtime.CompilerServices;
 using System.Runtime.CompilerServices;
 #if REAL_T_IS_DOUBLE
 #if REAL_T_IS_DOUBLE
 using real_t = System.Double;
 using real_t = System.Double;
@@ -125,7 +126,7 @@ namespace Godot
             godot_icall_GD_randomize();
             godot_icall_GD_randomize();
         }
         }
 
 
-        public static double rand_range(double from, double to)
+        public static double RandRange(double from, double to)
         {
         {
             return godot_icall_GD_rand_range(from, to);
             return godot_icall_GD_rand_range(from, to);
         }
         }
@@ -135,68 +136,34 @@ namespace Godot
             return godot_icall_GD_rand_seed(seed, out newSeed);
             return godot_icall_GD_rand_seed(seed, out newSeed);
         }
         }
 
 
-        public static int[] Range(int length)
+        public static IEnumerable<int> Range(int end)
         {
         {
-            var ret = new int[length];
-
-            for (int i = 0; i < length; i++)
-            {
-                ret[i] = i;
-            }
-
-            return ret;
+            return Range(0, end, 1);
         }
         }
 
 
-        public static int[] Range(int from, int to)
+        public static IEnumerable<int> Range(int start, int end)
         {
         {
-            if (to < from)
-                return new int[0];
-
-            var ret = new int[to - from];
-
-            for (int i = from; i < to; i++)
-            {
-                ret[i - from] = i;
-            }
-
-            return ret;
+            return Range(start, end, 1);
         }
         }
 
 
-        public static int[] Range(int from, int to, int increment)
+        public static IEnumerable<int> Range(int start, int end, int step)
         {
         {
-            if (to < from && increment > 0)
-                return new int[0];
-            if (to > from && increment < 0)
-                return new int[0];
-
-            // Calculate count
-            int count;
+            if (end < start && step > 0)
+                yield break;
 
 
-            if (increment > 0)
-                count = (to - from - 1) / increment + 1;
-            else
-                count = (from - to - 1) / -increment + 1;
-
-            var ret = new int[count];
+            if (end > start && step < 0)
+                yield break;
 
 
-            if (increment > 0)
+            if (step > 0)
             {
             {
-                int idx = 0;
-                for (int i = from; i < to; i += increment)
-                {
-                    ret[idx++] = i;
-                }
+                for (int i = start; i < end; i += step)
+                    yield return i;
             }
             }
             else
             else
             {
             {
-                int idx = 0;
-                for (int i = from; i > to; i += increment)
-                {
-                    ret[idx++] = i;
-                }
+                for (int i = start; i > end; i += step)
+                    yield return i;
             }
             }
-
-            return ret;
         }
         }
 
 
         public static void Seed(ulong seed)
         public static void Seed(ulong seed)

+ 2 - 2
modules/mono/glue/Managed/Files/NodePath.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 
 namespace Godot
 namespace Godot
 {
 {
-    public partial class NodePath : IDisposable
+    public sealed partial class NodePath : IDisposable
     {
     {
         private bool disposed = false;
         private bool disposed = false;
 
 
@@ -31,7 +31,7 @@ namespace Godot
             GC.SuppressFinalize(this);
             GC.SuppressFinalize(this);
         }
         }
 
 
-        protected virtual void Dispose(bool disposing)
+        private void Dispose(bool disposing)
         {
         {
             if (disposed)
             if (disposed)
                 return;
                 return;

+ 2 - 2
modules/mono/glue/Managed/Files/RID.cs

@@ -3,7 +3,7 @@ using System.Runtime.CompilerServices;
 
 
 namespace Godot
 namespace Godot
 {
 {
-    public partial class RID : IDisposable
+    public sealed partial class RID : IDisposable
     {
     {
         private bool disposed = false;
         private bool disposed = false;
 
 
@@ -31,7 +31,7 @@ namespace Godot
             GC.SuppressFinalize(this);
             GC.SuppressFinalize(this);
         }
         }
 
 
-        protected virtual void Dispose(bool disposing)
+        private void Dispose(bool disposing)
         {
         {
             if (disposed)
             if (disposed)
                 return;
                 return;

+ 0 - 1
modules/mono/glue/Managed/Files/Transform2D.cs

@@ -88,7 +88,6 @@ namespace Godot
             }
             }
         }
         }
 
 
-
         public real_t this[int index, int axis]
         public real_t this[int index, int axis]
         {
         {
             get
             get