Exemplo n.º 1
0
 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]);
     }
 }
Exemplo n.º 2
0
 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]);
     }
 }
Exemplo n.º 3
0
 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]);
     }
 }
Exemplo n.º 4
0
            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);
                    }
                }
            }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 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();
 }
Exemplo n.º 8
0
        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;
            }
        }