123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- using System.Runtime.CompilerServices;
- namespace LitMotion
- {
- internal static class Utf16StringHelper
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void WriteInt32(ref char[] buffer, ref int bufferOffset, int value)
- {
- WriteInt64(ref buffer, ref bufferOffset, value);
- }
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long value)
- {
- long num1 = value, num2, num3, num4, num5, div;
- if (value < 0)
- {
- if (value == long.MinValue) // -9223372036854775808
- {
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 20);
- buffer[bufferOffset++] = '-';
- buffer[bufferOffset++] = '9';
- buffer[bufferOffset++] = '2';
- buffer[bufferOffset++] = '2';
- buffer[bufferOffset++] = '3';
- buffer[bufferOffset++] = '3';
- buffer[bufferOffset++] = '7';
- buffer[bufferOffset++] = '2';
- buffer[bufferOffset++] = '0';
- buffer[bufferOffset++] = '3';
- buffer[bufferOffset++] = '6';
- buffer[bufferOffset++] = '8';
- buffer[bufferOffset++] = '5';
- buffer[bufferOffset++] = '4';
- buffer[bufferOffset++] = '7';
- buffer[bufferOffset++] = '7';
- buffer[bufferOffset++] = '5';
- buffer[bufferOffset++] = '8';
- buffer[bufferOffset++] = '0';
- buffer[bufferOffset++] = '8';
- }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 1);
- buffer[bufferOffset++] = '-';
- num1 = unchecked(-value);
- }
- // WriteUInt64(inlined)
- if (num1 < 10000)
- {
- if (num1 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 1); goto L1; }
- if (num1 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 2); goto L2; }
- if (num1 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 3); goto L3; }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 4); goto L4;
- }
- else
- {
- num2 = num1 / 10000;
- num1 -= num2 * 10000;
- if (num2 < 10000)
- {
- if (num2 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 5); goto L5; }
- if (num2 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 6); goto L6; }
- if (num2 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 7); goto L7; }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 8); goto L8;
- }
- else
- {
- num3 = num2 / 10000;
- num2 -= num3 * 10000;
- if (num3 < 10000)
- {
- if (num3 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 9); goto L9; }
- if (num3 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 10); goto L10; }
- if (num3 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 11); goto L11; }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 12); goto L12;
- }
- else
- {
- num4 = num3 / 10000;
- num3 -= num4 * 10000;
- if (num4 < 10000)
- {
- if (num4 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 13); goto L13; }
- if (num4 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 14); goto L14; }
- if (num4 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 15); goto L15; }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 16); goto L16;
- }
- else
- {
- num5 = num4 / 10000;
- num4 -= num5 * 10000;
- if (num5 < 10000)
- {
- if (num5 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 17); goto L17; }
- if (num5 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 18); goto L18; }
- if (num5 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 19); goto L19; }
- ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 20); goto L20;
- }
- L20:
- buffer[bufferOffset++] = (char)('0' + (div = (num5 * 8389L) >> 23));
- num5 -= div * 1000;
- L19:
- buffer[bufferOffset++] = (char)('0' + (div = (num5 * 5243L) >> 19));
- num5 -= div * 100;
- L18:
- buffer[bufferOffset++] = (char)('0' + (div = (num5 * 6554L) >> 16));
- num5 -= div * 10;
- L17:
- buffer[bufferOffset++] = (char)('0' + num5);
- }
- L16:
- buffer[bufferOffset++] = (char)('0' + (div = (num4 * 8389L) >> 23));
- num4 -= div * 1000;
- L15:
- buffer[bufferOffset++] = (char)('0' + (div = (num4 * 5243L) >> 19));
- num4 -= div * 100;
- L14:
- buffer[bufferOffset++] = (char)('0' + (div = (num4 * 6554L) >> 16));
- num4 -= div * 10;
- L13:
- buffer[bufferOffset++] = (char)('0' + num4);
- }
- L12:
- buffer[bufferOffset++] = (char)('0' + (div = (num3 * 8389L) >> 23));
- num3 -= div * 1000;
- L11:
- buffer[bufferOffset++] = (char)('0' + (div = (num3 * 5243L) >> 19));
- num3 -= div * 100;
- L10:
- buffer[bufferOffset++] = (char)('0' + (div = (num3 * 6554L) >> 16));
- num3 -= div * 10;
- L9:
- buffer[bufferOffset++] = (char)('0' + num3);
- }
- L8:
- buffer[bufferOffset++] = (char)('0' + (div = (num2 * 8389L) >> 23));
- num2 -= div * 1000;
- L7:
- buffer[bufferOffset++] = (char)('0' + (div = (num2 * 5243L) >> 19));
- num2 -= div * 100;
- L6:
- buffer[bufferOffset++] = (char)('0' + (div = (num2 * 6554L) >> 16));
- num2 -= div * 10;
- L5:
- buffer[bufferOffset++] = (char)('0' + num2);
- }
- L4:
- buffer[bufferOffset++] = (char)('0' + (div = (num1 * 8389L) >> 23));
- num1 -= div * 1000;
- L3:
- buffer[bufferOffset++] = (char)('0' + (div = (num1 * 5243L) >> 19));
- num1 -= div * 100;
- L2:
- buffer[bufferOffset++] = (char)('0' + (div = (num1 * 6554L) >> 16));
- num1 -= div * 10;
- L1:
- buffer[bufferOffset++] = (char)('0' + num1);
- }
- }
- }
|