/// <summary> /// 范围排序 /// </summary> /// <typeparam name="valueType">排序数据类型</typeparam> /// <param name="values">待排序数组</param> /// <param name="startIndex">起始位置</param> /// <param name="count">排序范围数据数量</param> /// <param name="comparer">排序比较器</param> /// <param name="skipCount">跳过数据数量</param> /// <param name="getCount">排序数据数量</param> /// <returns>排序后的数据</returns> public static SubArray <valueType> RangeSort <valueType> (this valueType[] values, int startIndex, int count, Func <valueType, valueType, int> comparer, int skipCount, int getCount) { FormatRange range = new FormatRange(values.length(), startIndex, count); if ((count = range.GetCount) != 0) { FormatRange getRange = new FormatRange(count, skipCount, getCount); if ((getCount = getRange.GetCount) != 0) { if (comparer == null) { throw new ArgumentNullException(); } skipCount = range.SkipCount + getRange.SkipCount; new AutoCSer.Algorithm.RangeQuickSort.Sorter <valueType> { Array = values, Comparer = comparer, SkipCount = skipCount, GetEndIndex = skipCount + getCount - 1 }.Sort(range.SkipCount, range.SkipCount + --count); return(new SubArray <valueType>(skipCount, getCount, values)); } } return(default(SubArray <valueType>)); }
public static void Sort <valueType>(valueType[] values, Func <valueType, valueType, int> comparer, int startIndex, int count) { FormatRange range = new FormatRange(values.length(), startIndex, count); if (range.GetCount > 1) { new Sorter <valueType> { Array = values, Comparer = comparer }.Sort(range.SkipCount, range.EndIndex - 1); } }
public static void FormatCurrentDocument(ObjectModelRoot psIse, FormatRange range) { //Cached IseRoot is not sync? ISERoot.CurrentFile may be null when multiple PowerShell tab opened. var currentFile = psIse.CurrentFile; if (currentFile == null) { return; } //TODO:Reflection Performance var viewHost = (IWpfTextViewHost)typeof(ISEEditor).GetProperty("EditorViewHost", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(currentFile.Editor); var textView = (ITextView)viewHost.TextView; if (textView == null || textView.TextBuffer == null) { return; } var analyzer = _codeAnalyzerFactory.Create(textView); var formatter = _codeFormatterFactory.Create(textView.TextBuffer); var analyzedResult = analyzer.Analyze(); var formatResult = formatter.FormatCode(analyzedResult); try { //Need to execute operation in UI thread? to avoid ISE crashed by ArgumentOutOfRangeException Application.Current.Dispatcher.Invoke(() => { //If refresh needed. retry operation in UI thread if (textView.TextSnapshot.Version != analyzedResult.TextSnapshot.Version) { formatResult = formatter.FormatCode(analyzer.Analyze()); } formatResult.Commit(_undoManagerProvider); }); } catch (Exception ex) { LastException = ex; throw; //TODO:Support ErrorMessage //Console.WriteLine(ex.Message); //Output to ISE ConsoleWindow } }
/// <summary> /// 范围排序 /// </summary> /// <typeparam name="valueType">排序数据类型</typeparam> /// <param name="values">待排序数组</param> /// <param name="startIndex">起始位置</param> /// <param name="count">排序范围数据数量</param> /// <param name="comparer">排序比较器</param> /// <param name="skipCount">跳过数据数量</param> /// <param name="getCount">排序数据数量</param> /// <returns>排序后的数据</returns> public static SubArray <valueType> GetRangeSort <valueType> (this valueType[] values, int startIndex, int count, Func <valueType, valueType, int> comparer, int skipCount, int getCount) { FormatRange range = new FormatRange(values.length(), startIndex, count); if ((count = range.GetCount) != 0) { FormatRange getRange = new FormatRange(count, skipCount, getCount); if ((getCount = getRange.GetCount) != 0) { valueType[] newValues = new valueType[count]; Array.Copy(values, range.SkipCount, newValues, 0, count); return(RangeSort(newValues, comparer, getRange.SkipCount, getCount)); } } return(default(SubArray <valueType>)); }
public int FormatRange(PrintPageEventArgs e, int charFrom, int charTo) { var range = new CharRange { cpMin = charFrom, cpMax = charTo }; var rect = new Rect { top = (int)(e.MarginBounds.Top * inch), bottom = (int)(e.MarginBounds.Bottom * inch), left = (int)(e.MarginBounds.Left * inch), right = (int)(e.MarginBounds.Right * inch) }; var rectPage = new Rect { top = (int)(e.PageBounds.Top * inch), bottom = (int)(e.PageBounds.Bottom * inch), left = (int)(e.PageBounds.Left * inch), right = (int)(e.PageBounds.Right * inch) }; IntPtr hdc = e.Graphics.GetHdc(); var formatRange = new FormatRange { chrg = range, hdc = hdc, hdcTarget = hdc, rc = rect, rcPage = rectPage }; IntPtr lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(formatRange)); Marshal.StructureToPtr(formatRange, lParam, false); IntPtr result = NativeMethods.SendMessage(Handle, RichEditMessages.EM_FORMATRANGE, (IntPtr)1, lParam); Marshal.FreeCoTaskMem(lParam); e.Graphics.ReleaseHdc(hdc); return(result.ToInt32()); }
/// <summary> /// 范围排序 /// </summary> /// <typeparam name="valueType">排序数据类型</typeparam> /// <param name="values">待排序数组</param> /// <param name="comparer">排序比较器</param> /// <param name="skipCount">跳过数据数量</param> /// <param name="getCount">排序数据数量</param> /// <returns>排序后的数据</returns> public static SubArray <valueType> RangeSort <valueType> (this valueType[] values, Func <valueType, valueType, int> comparer, int skipCount, int getCount) { FormatRange range = new FormatRange(values.length(), skipCount, getCount); if ((getCount = range.GetCount) != 0) { if (comparer == null) { throw new ArgumentNullException(); } new AutoCSer.Algorithm.RangeQuickSort.Sorter <valueType> { Array = values, Comparer = comparer, SkipCount = range.SkipCount, GetEndIndex = range.EndIndex - 1 }.Sort(0, values.Length - 1); return(new SubArray <valueType>(range.SkipCount, getCount, values)); } return(new SubArray <valueType>()); }
public FormatSerializeException(string message, Exception innerException, FormatRange format, object model) : base(message, innerException) { Format = format; Model = model; }
public FormatDeserializeException(string message, Exception innerException, FormatRange format, Type targetType, string input) : base(message, innerException) { Format = format; TargetType = targetType; Input = input; }