示例#1
0
 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);
 }
示例#2
0
 /// <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));
     }
 }
示例#3
0
 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);
     }
 }
示例#4
0
        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);
        }