예제 #1
0
        /// <summary>
        /// Запускает методы сортировки с идентификаторами из methodIDs для массива array.
        /// </summary>
        /// <param name="methodIDs">Список содержащий идентификаторы методов которые требуется запустить</param>
        /// <param name="array">Массив для сортировки</param>
        /// <returns>Список результатов вызова методов</returns>
        public static List <MethodInfo> RunMethods(List <int> methodIDs, int[] array)
        {
            List <MethodInfo> decRes = new List <MethodInfo>();

            // Бежим по всем полученым делегатам и вызываем данные методы.
            for (int i = 0; i < methodIDs.Count; i++)
            {
                // РУСЯ: плс сделай понормальному сам видишь как это некрасиво
                try
                {
                    MethodInfo_Pair methodInputInfo = new MethodInfo_Pair(Methods.DicIdName[methodIDs[i]], Methods.DicMetSor[Methods.DicIdName[methodIDs[i]]]);
                    decRes.Add(RunMethod(methodInputInfo, Utilits.CopyArray(array)));
                }
                catch (IndexOutOfRangeException e)
                {
                    decRes.Add(ExceptionOutOfRangeMethodInfo);
                }
                catch (Exception e)
                {
                    decRes.Add(ExceptionErrorMethodInfo);
                }
            }

            return(decRes);
        }
예제 #2
0
        // Вызывает метод из пары "метод+имя" methodInputInfo для массива array.
        private static MethodInfo RunMethod(MethodInfo_Pair methodInputInfo, int[] array)
        {
            MethodInfo outStruct; int[] sortedArray;
            Stopwatch  timer = new Stopwatch();

            timer.Start();
            sortedArray = methodInputInfo.Value(array);
            timer.Stop();

            outStruct.name     = methodInputInfo.Key;
            outStruct.time     = (int)timer.Elapsed.TotalSeconds; // Время в секундах.
            outStruct.capacity = sortedArray.Length;              // Спорный вопрос: на кой черт метод возвращает размер обработанного массива,
                                                                  // если мы вызываем все методы для одного массива за раз и этот размер не меняется со временем.

            System.Threading.Thread.Sleep(3);                     // даем потоку передохнуть

            if (CloseMethod != null)
            {
                CloseMethod.Invoke();
            }

            return(outStruct);
        }