private static void Sort <T>(this IList <T> list, int index, int count, Comparison <T> comp, int[] indexes, int quickSelectElems = int.MaxValue) { CheckParam.IsInRange("index", index, 0, list.Count); CheckParam.IsInRange("count", count, 0, list.Count - index); SortCore(list, index, count, comp, indexes, quickSelectElems); }
/// <summary>Same as <see cref="IntegerToString(long, string, int, int, char)"/> /// except that the target StringBuilder must be provided as a parameter.</summary> /// <param name="value">Integer to be converted</param> /// <param name="prefix">A prefix to insert before the number, but after the '-' sign, if any (e.g. "0x" for hex). Use "" for no prefix.</param> /// <param name="base">Number base (e.g. 10 for decimal, 2 for binary, 16 for hex). Must be in the range 2 to 36.</param> /// <param name="separatorInterval">Number of digits in a group (use 0 or less to disable digit separators)</param> /// <param name="separatorChar">Digit group separator</param> /// <returns>The target StringBuilder.</returns> public static StringBuilder AppendIntegerTo(StringBuilder target, long value, string prefix = "", int @base = 10, int separatorInterval = 3, char separatorChar = '_') { if (value < 0) { CheckParam.IsInRange("base", @base, 2, 36); target.Append('-'); target.Append(prefix); return(AppendIntegerTo(target, (ulong)-value, "", @base, separatorInterval, separatorChar)); } else { return(AppendIntegerTo(target, (ulong)value, prefix, @base, separatorInterval, separatorChar)); } }
public void InsertSpace(int index, int count = 1) { if (count > 0) { //CheckParam.IsInRange("index", index, 0, Count); checked by DoSparseOperation AutoThrow(); var newCount = checked (Count + count); var op = new AListSparseOperation <T>((uint)index, true, true, count, _observer); DoSparseOperation(ref op); } else { CheckParam.IsNotNegative("count", count); CheckParam.IsInRange("index", index, 0, Count); } }
public static StringBuilder AppendIntegerTo(StringBuilder target, ulong value, string prefix = "", int @base = 10, int separatorInterval = 3, char separatorChar = '_') { CheckParam.IsInRange("base", @base, 2, 36); target.Append(prefix); int iStart = target.Length; int counter = 0; int shift = @base > 8 ? (@base <= 16 ? 4 : 5) : (@base <= 2 ? 1 : @base <= 4 ? 2 : 3); int mask = (1 << shift == @base ? (1 << shift) - 1 : 0); for (;;) { uint digit; if (mask != 0) { digit = (uint)value & (uint)mask; value >>= shift; } else { digit = (uint)(value % (uint)@base); value /= (uint)@base; } target.Append(HexDigitChar((int)digit)); if (value == 0) { break; } if (++counter == separatorInterval) { counter = 0; target.Append(separatorChar); } } // Reverse the appended characters for (int i = ((target.Length - iStart) >> 1) - 1; i >= 0; i--) { int i1 = iStart + i, i2 = target.Length - 1 - i; char temp = target[i1]; target[i1] = target[i2]; target[i2] = temp; } return(target); }