/// <summary> /// Метод всеобщей сортировки слиянием. Постепенно происходит слияние массива из нескольких упорядоченных подмассивов /// </summary> /// <param name="Array">Массив всех элементов</param> /// <param name="start">Массив, обозначающий разделение подпоследовательностей</param> /// <returns>Возвращает отсортированный массив</returns> public ClassMerge[] BigMerge(ClassMerge[] Array, int[] start) { int ArrNum = start.Length; int Numbers = Array.Length; int[] end = new int[ArrNum]; //массив будущих концов интервалов - изначально равен массиву стартовых разделителей for (int o = 0; o < ArrNum; o++) { end[o] = start[o]; } ClassMerge[] Temp = new ClassMerge[Numbers]; //новый массив, куда будут помещаться отсортированные элементы int Zapoln = 0; while (Zapoln != Numbers) //пока новый массив не заполнится { int[] sravn = new int[ArrNum]; //массив для сравнения элементов подмассивов int k = 0; for (k = 0; k < ArrNum - 1; k++) { if (end[k] < start[k + 1]) { sravn[k] = Array[end[k]].K; //добавляем в массив для сравнений элемент, если данный интервал себя не исчерпал } } if (end[ArrNum - 1] < Array.Length) { sravn[ArrNum - 1] = Array[end[end.Length - 1]].K; //последний элемент проверяем отдельно } int small = WhoisSmallest(sravn); //ищем номер подмассива, где элемент минимален Temp[Zapoln] = Array[end[small]]; //добавляем новый элемент end[small]++; //конец подинтервала продвигается Zapoln++; } return(Temp); }
/// <summary> /// Run the merge tool. Tag of a sender may contain an individual file name. /// </summary> private void MenuMergeTool(object sender, EventArgs e) { string file = (sender as ToolStripMenuItem).Tag as string ?? ""; string cmd = "mergetool " + ClassMerge.GetMergeCmd() + " \"" + file + "\""; status.Repo.RunCmd(cmd); App.DoRefresh(); }
/// <summary> /// Apply changed settings /// </summary> public void ApplyChanges() { if (comboBoxPath.Tag != null || textArgs.Tag != null) { string name = Path.GetFileNameWithoutExtension(comboBoxPath.Text.Trim()); AppHelper app = new AppHelper(name, comboBoxPath.Text, textArgs.Text.Trim()); Properties.Settings.Default.MergeAppHelper = app.ToString(); ClassMerge.Configure(app); } }
/// <summary> /// Apply changed settings /// </summary> public void ApplyChanges() { if (comboBoxPath.Tag != null || textArgs.Tag != null) { try { string name = Path.GetFileNameWithoutExtension(comboBoxPath.Text.Trim()); AppHelper app = new AppHelper(name, comboBoxPath.Text, textArgs.Text.Trim()); Properties.Settings.Default.MergeAppHelper = app.ToString(); ClassMerge.Configure(app); } catch (Exception ex) { App.PrintLogMessage(ex.Message, MessageType.Error); } } }
/// <summary> /// Initialize pertinent settings /// </summary> /// <param name="options">All git global settings</param> public void Init(string[] options) { // Detect all merge utilities on the system and populate a listbox helpers = ClassMerge.GetDetected(); comboBoxPath.Items.Clear(); foreach (var appHelper in helpers) { comboBoxPath.Items.Add(appHelper.Path); } // Get our program default merge tool and set the listbox text AppHelper app = new AppHelper(Properties.Settings.Default.MergeAppHelper); comboBoxPath.Text = app.Path; textArgs.Text = app.Args; // Add the dirty (modified) value changed helper comboBoxPath.TextChanged += ControlDirtyHelper.ControlDirty; textArgs.TextChanged += ControlDirtyHelper.ControlDirty; }
/// <summary> /// Добавление элемента /// </summary> /// <param name="T">инф. поле</param> /// <param name="K">ключ. поле</param> /// <returns>Возвращает новый элемент</returns> public ClassMerge AddElement(int T, int K) { ClassMerge Element = new ClassMerge(T, K); return(Element); }