public static void FromRadix(NativeArray<uint> source, NativeArray<float> destenation) { for (int i = 0; i < source.Length; i++) { destenation[i] = RadixUtil.FromRadix_float(source[i]); } }
public static void FromRadix(List <uint> source, List <float> destenation) { for (int i = 0; i < source.Count; i++) { destenation[i] = RadixUtil.FromRadix_float(source[i]); } }
private static void FromRadix(List <uint> source, List <int> destenation) { for (int i = 0; i < source.Count; i++) { destenation[i] = RadixUtil.FromRadix_int(source[i]); } }
void sort(int min, int max, int digitIndex) { if (max - min <= 1) return; int exp = (int)System.Math.Pow(multi, digitIndex); int tailsStart = multi * digitIndex; int tailsEnd = multi * (digitIndex + 1); for (int i = 0; i < multi; i++) UnsafeUtility.WriteArrayElement(histogram, i, 0); for (int i = min; i < max; i++) RadixUtil.IncrementArrayElement(histogram, RadixUtil.GetDigit(array, i, exp, multi)); UnsafeUtility.WriteArrayElement(heads, 0, min); UnsafeUtility.WriteArrayElement(tails, tailsStart, min + UnsafeUtility.ReadArrayElement<int>(histogram, 0)); for (int i = 1; i < multi; i++) { UnsafeUtility.WriteArrayElement(heads, i, UnsafeUtility.ReadArrayElement<int>(heads, i - 1) + UnsafeUtility.ReadArrayElement<int>(histogram, i - 1)); UnsafeUtility.WriteArrayElement(tails, tailsStart + i, UnsafeUtility.ReadArrayElement<int>(tails, tailsStart + i - 1) + UnsafeUtility.ReadArrayElement<int>(histogram, i)); } uint temp = 0; for (int i = 0; i < multi; i++) { while (UnsafeUtility.ReadArrayElement<int>(heads, i) < UnsafeUtility.ReadArrayElement<int>(tails, tailsStart + i)) { uint element = UnsafeUtility.ReadArrayElement<uint>(array, UnsafeUtility.ReadArrayElement<int>(heads, i)); int elementIndex = (int)((element / exp) % multi); while (elementIndex != i) { temp = element; element = UnsafeUtility.ReadArrayElement<uint>(array, UnsafeUtility.ReadArrayElement<int>(heads, elementIndex)); UnsafeUtility.WriteArrayElement(array, UnsafeUtility.ReadArrayElement<int>(heads, elementIndex), temp); RadixUtil.IncrementArrayElement(heads, elementIndex); elementIndex = (int)((element / exp) % multi); } UnsafeUtility.WriteArrayElement(array, UnsafeUtility.ReadArrayElement<int>(heads, i), (int)element); RadixUtil.IncrementArrayElement(heads, i); } } digitIndex--; if (digitIndex >= 0) { sort(min, UnsafeUtility.ReadArrayElement<int>(tails, tailsStart), digitIndex); for (int i = tailsStart + 1; i < tailsEnd; i++) { sort(UnsafeUtility.ReadArrayElement<int>(tails, i - 1), UnsafeUtility.ReadArrayElement<int>(tails, i), digitIndex); } } }
public static NativeArray<uint> ToRadix(NativeArray<float> array) { var converted = new NativeArray<uint>(array.Length,Allocator.TempJob); for (int i = 0; i < array.Length; i++) { converted[i] = RadixUtil.ToRadix(array[i]); } return converted; }
public static List <uint> ToRadix(List <float> list) { var converted = new List <uint>(list.Count); for (int i = 0; i < list.Count; i++) { converted.Add(RadixUtil.ToRadix(list[i])); } return(converted); }
public unsafe static void RadixLSBSort(NativeArray<uint> array) { int maxDigit = (int)RadixUtil.GetMaxBinaryDigit(GetMaxValue(array)); var tempArray = new NativeArray<uint>(array.Length, Allocator.TempJob); var sortJob = new RadixLSBSortJob() { array = array, tempArray = tempArray, start = 0, end = array.Length, maxDigit = maxDigit }; sortJob.Schedule().Complete(); tempArray.Dispose(); }
public static void RadixLSBSort(List <uint> list) { uint maxDigit = RadixUtil.GetMaxBinaryDigit(GetMaxValue(list, uint.MinValue)); uint[] copyArray = new uint[list.Count]; int l, r, temp = 0; uint digit = 1; for (uint i = 0; i < maxDigit; i++) { l = 0; r = list.Count - 1; for (int j = 0; j < list.Count; j++) { if ((list[j] & digit) == 0) { copyArray[l++] = list[j]; } else { copyArray[r--] = list[j]; } } for (int j = 0; j <= r; j++) { list[j] = copyArray[j]; } temp = l; for (int j = list.Count - 1; j >= l; j--) { list[temp] = copyArray[j]; temp++; } digit <<= 1; } }