public void CopyTo(MemoryTraceBuilder destination, int startIndex)
 {
     if ((this.startEntry < this.freeEntry && (startIndex < this.startEntry || startIndex >= this.freeEntry)) || (this.startEntry > this.freeEntry && startIndex < this.startEntry && startIndex >= this.freeEntry))
     {
         throw new ArgumentOutOfRangeException("startIndex");
     }
     int num = startIndex;
     while (num != this.freeEntry)
     {
         TraceEntry traceEntry = this.entries[num];
         destination.BeginEntry(traceEntry);
         if (destination.ReserveSpace(traceEntry.Length))
         {
             int startIndex2 = traceEntry.StartIndex;
             for (int i = traceEntry.Length; i > 0; i--)
             {
                 char nextCharInTraceBuffer = MemoryTraceBuilder.GetNextCharInTraceBuffer(this.traceBuffer, ref startIndex2);
                 destination.AppendWithoutCheck(nextCharInTraceBuffer);
             }
         }
         destination.EndEntry();
         if (++num == this.entryArrayLength)
         {
             num = 0;
         }
     }
 }
 private static int GetTraceArgument(List<object> arguments, char[] buffer, ref int startIndex)
 {
     int result = 0;
     int nextCharInTraceBuffer = (int)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex);
     if (nextCharInTraceBuffer == 0)
     {
         int num = (int)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex);
         num += (int)((int)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex) << 16);
         result = 3;
         arguments.Add(num);
     }
     else if (nextCharInTraceBuffer == 1)
     {
         long num2 = (long)((ulong)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex));
         num2 += (long)((long)((ulong)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex)) << 16);
         num2 += (long)((long)((ulong)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex)) << 32);
         num2 += (long)((long)((ulong)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex)) << 48);
         result = 5;
         arguments.Add(num2);
     }
     else if (nextCharInTraceBuffer == 2)
     {
         byte[] array = new byte[16];
         for (int i = 0; i < 16; i += 2)
         {
             char nextCharInTraceBuffer2 = MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex);
             array[i] = (byte)nextCharInTraceBuffer2;
             array[i + 1] = (byte)(nextCharInTraceBuffer2 >> 8);
         }
         Guid guid = new Guid(array);
         arguments.Add(guid);
         result = 9;
     }
     else if (nextCharInTraceBuffer == 3)
     {
         int nextCharInTraceBuffer3 = (int)MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex);
         StringBuilder stringBuilder = new StringBuilder();
         for (int j = 0; j < nextCharInTraceBuffer3; j++)
         {
             stringBuilder.Append(MemoryTraceBuilder.GetNextCharInTraceBuffer(buffer, ref startIndex));
         }
         result = nextCharInTraceBuffer3 + 2;
         arguments.Add(stringBuilder.ToString());
     }
     return result;
 }