corrade-vassal – Diff between revs 13 and 16

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 13 Rev 16
Line 6... Line 6...
6   6  
Line 7... Line 7...
7 using System; 7 using System;
8   8  
9 namespace wasSharp 9 namespace wasSharp
10 { 10 {
11 public class Arrays 11 public static class Arrays
12 { 12 {
13 /////////////////////////////////////////////////////////////////////////// 13 ///////////////////////////////////////////////////////////////////////////
14 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 // 14 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 //
Line 20... Line 20...
20 /// <param name="index">a positive or negative index of the element</param> 20 /// <param name="index">a positive or negative index of the element</param>
21 /// <param name="data">the array</param> 21 /// <param name="data">the array</param>
22 /// <return>an array element</return> 22 /// <return>an array element</return>
23 public static T GetElementAt<T>(T[] data, int index) 23 public static T GetElementAt<T>(T[] data, int index)
24 { 24 {
25 switch (index < 0) -  
26 { -  
27 case true: -  
28 return data[((index%data.Length) + data.Length)%data.Length]; 25 return index < 0 ? data[(index%data.Length + data.Length)%data.Length] : data[index%data.Length];
29 default: -  
30 return data[index%data.Length]; -  
31 } -  
32 } 26 }
Line 33... Line 27...
33   27  
34 /////////////////////////////////////////////////////////////////////////// 28 ///////////////////////////////////////////////////////////////////////////
35 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 // 29 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 //
Line 44... Line 38...
44 /// <returns>the array slice between start and stop</returns> 38 /// <returns>the array slice between start and stop</returns>
45 public static T[] GetSubArray<T>(T[] data, int start, int stop) 39 public static T[] GetSubArray<T>(T[] data, int start, int stop)
46 { 40 {
47 if (stop.Equals(-1)) 41 if (stop.Equals(-1))
48 stop = data.Length - 1; 42 stop = data.Length - 1;
49 T[] result = new T[stop - start + 1]; 43 var result = new T[stop - start + 1];
50 Array.Copy(data, start, result, 0, stop - start + 1); 44 Array.Copy(data, start, result, 0, stop - start + 1);
51 return result; 45 return result;
52 } 46 }
Line 53... Line 47...
53   47  
Line 64... Line 58...
64 /// <returns>the array without elements between start and stop</returns> 58 /// <returns>the array without elements between start and stop</returns>
65 public static T[] DeleteSubArray<T>(T[] data, int start, int stop) 59 public static T[] DeleteSubArray<T>(T[] data, int start, int stop)
66 { 60 {
67 if (stop.Equals(-1)) 61 if (stop.Equals(-1))
68 stop = data.Length - 1; 62 stop = data.Length - 1;
69 T[] result = new T[data.Length - (stop - start) - 1]; 63 var result = new T[data.Length - (stop - start) - 1];
70 Array.Copy(data, 0, result, 0, start); 64 Array.Copy(data, 0, result, 0, start);
71 Array.Copy(data, stop + 1, result, start, data.Length - stop - 1); 65 Array.Copy(data, stop + 1, result, start, data.Length - stop - 1);
72 return result; 66 return result;
73 } 67 }
Line 81... Line 75...
81 /// <typeparam name="T">the array type</typeparam> 75 /// <typeparam name="T">the array type</typeparam>
82 /// <param name="arrays">multiple arrays</param> 76 /// <param name="arrays">multiple arrays</param>
83 /// <returns>a flat array with all arrays concatenated</returns> 77 /// <returns>a flat array with all arrays concatenated</returns>
84 public static T[] ConcatenateArrays<T>(params T[][] arrays) 78 public static T[] ConcatenateArrays<T>(params T[][] arrays)
85 { 79 {
86 int resultLength = 0; 80 var resultLength = 0;
87 foreach (T[] o in arrays) 81 foreach (var o in arrays)
88 { 82 {
89 resultLength += o.Length; 83 resultLength += o.Length;
90 } 84 }
91 T[] result = new T[resultLength]; 85 var result = new T[resultLength];
92 int offset = 0; 86 var offset = 0;
93 for (int x = 0; x < arrays.Length; x++) 87 for (var x = 0; x < arrays.Length; x++)
94 { 88 {
95 arrays[x].CopyTo(result, offset); 89 arrays[x].CopyTo(result, offset);
96 offset += arrays[x].Length; 90 offset += arrays[x].Length;
97 } 91 }
98 return result; 92 return result;
Line 109... Line 103...
109 /// <param name="times">the number of times to permute</param> 103 /// <param name="times">the number of times to permute</param>
110 /// <returns>the array with the elements permuted</returns> 104 /// <returns>the array with the elements permuted</returns>
111 public static T[] ReversePermuteArrayElements<T>(T[] input, int times) 105 public static T[] ReversePermuteArrayElements<T>(T[] input, int times)
112 { 106 {
113 if (times.Equals(0)) return input; 107 if (times.Equals(0)) return input;
114 T[] slice = new T[input.Length]; 108 var slice = new T[input.Length];
115 Array.Copy(input, 1, slice, 0, input.Length - 1); 109 Array.Copy(input, 1, slice, 0, input.Length - 1);
116 Array.Copy(input, 0, slice, input.Length - 1, 1); 110 Array.Copy(input, 0, slice, input.Length - 1, 1);
117 return ReversePermuteArrayElements(slice, --times); 111 return ReversePermuteArrayElements(slice, --times);
118 } 112 }
Line 128... Line 122...
128 /// <param name="times">the number of times to permute</param> 122 /// <param name="times">the number of times to permute</param>
129 /// <returns>the array with the elements permuted</returns> 123 /// <returns>the array with the elements permuted</returns>
130 public static T[] ForwardPermuteArrayElements<T>(T[] input, int times) 124 public static T[] ForwardPermuteArrayElements<T>(T[] input, int times)
131 { 125 {
132 if (times.Equals(0)) return input; 126 if (times.Equals(0)) return input;
133 T[] slice = new T[input.Length]; 127 var slice = new T[input.Length];
134 Array.Copy(input, input.Length - 1, slice, 0, 1); 128 Array.Copy(input, input.Length - 1, slice, 0, 1);
135 Array.Copy(input, 0, slice, 1, input.Length - 1); 129 Array.Copy(input, 0, slice, 1, input.Length - 1);
136 return ForwardPermuteArrayElements(slice, --times); 130 return ForwardPermuteArrayElements(slice, --times);
137 } 131 }
138 } 132 }