DemandSpace() private static method

private static DemandSpace ( int required, ProtoWriter writer ) : void
required int
writer ProtoWriter
return void
Ejemplo n.º 1
0
        public static void WriteString(string value, ProtoWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (writer.wireType != ProtoBuf.WireType.String)
            {
                throw ProtoWriter.CreateException(writer);
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
            if (value.Length == 0)
            {
                ProtoWriter.WriteUInt32Variant(0, writer);
                writer.wireType = ProtoBuf.WireType.None;
                return;
            }
            int byteCount = ProtoWriter.encoding.GetByteCount(value);

            ProtoWriter.WriteUInt32Variant((uint)byteCount, writer);
            ProtoWriter.DemandSpace(byteCount, writer);
            int bytes = ProtoWriter.encoding.GetBytes(value, 0, value.Length, writer.ioBuffer, writer.ioIndex);

            ProtoWriter.IncrementedAndReset(bytes, writer);
        }
Ejemplo n.º 2
0
        private static void CopyRawFromStream(Stream source, ProtoWriter writer)
        {
            byte[] numArray = writer.ioBuffer;
            int    length   = (int)numArray.Length - writer.ioIndex;
            int    num      = 1;

            while (length > 0)
            {
                int num1 = source.Read(numArray, writer.ioIndex, length);
                num = num1;
                if (num1 <= 0)
                {
                    break;
                }
                writer.ioIndex  += num;
                writer.position += num;
                length          -= num;
            }
            if (num <= 0)
            {
                return;
            }
            if (writer.flushLock == 0)
            {
                ProtoWriter.Flush(writer);
                while (true)
                {
                    int num2 = source.Read(numArray, 0, (int)numArray.Length);
                    num = num2;
                    if (num2 <= 0)
                    {
                        break;
                    }
                    writer.dest.Write(numArray, 0, num);
                    writer.position += num;
                }
                return;
            }
            while (true)
            {
                ProtoWriter.DemandSpace(128, writer);
                int num3 = source.Read(writer.ioBuffer, writer.ioIndex, (int)writer.ioBuffer.Length - writer.ioIndex);
                num = num3;
                if (num3 <= 0)
                {
                    break;
                }
                writer.position += num;
                writer.ioIndex  += num;
            }
        }
Ejemplo n.º 3
0
        public static void WriteBytes(byte[] data, int offset, int length, ProtoWriter writer)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            switch (writer.wireType)
            {
            case WireType.Fixed64:
                if (length != 8)
                {
                    throw new ArgumentException("length");
                }
                goto IL_D5;

            case WireType.String:
                ProtoWriter.WriteUInt32Variant((uint)length, writer);
                writer.wireType = WireType.None;
                if (length == 0)
                {
                    return;
                }
                if (writer.flushLock != 0 || length <= writer.ioBuffer.Length)
                {
                    goto IL_D5;
                }
                ProtoWriter.Flush(writer);
                writer.dest.Write(data, offset, length);
                writer.position += length;
                return;

            case WireType.Fixed32:
                if (length != 4)
                {
                    throw new ArgumentException("length");
                }
                goto IL_D5;
            }
            throw ProtoWriter.CreateException(writer);
IL_D5:
            ProtoWriter.DemandSpace(length, writer);
            Helpers.BlockCopy(data, offset, writer.ioBuffer, writer.ioIndex, length);
            ProtoWriter.IncrementedAndReset(length, writer);
        }
Ejemplo n.º 4
0
        private static void WriteUInt64Variant(ulong value, ProtoWriter writer)
        {
            ProtoWriter.DemandSpace(10, writer);
            int num = 0;

            do
            {
                writer.ioBuffer[writer.ioIndex++] = (byte)((value & 127uL) | 128uL);
                num++;
            }while ((value >>= 7) != 0uL);
            byte[] expr_51_cp_0 = writer.ioBuffer;
            int    expr_51_cp_1 = writer.ioIndex - 1;

            expr_51_cp_0[expr_51_cp_1] &= 127;
            writer.position            += num;
        }
Ejemplo n.º 5
0
        // Token: 0x060034D8 RID: 13528 RVA: 0x00132844 File Offset: 0x00130C44
        private static void WriteUInt64Variant(ulong value, ProtoWriter writer)
        {
            ProtoWriter.DemandSpace(10, writer);
            int num = 0;

            do
            {
                writer.ioBuffer[writer.ioIndex++] = (byte)((value & 127UL) | 128UL);
                num++;
            }while ((value >>= 7) != 0UL);
            byte[] array = writer.ioBuffer;
            int    num2  = writer.ioIndex - 1;

            array[num2]     &= 127;
            writer.position += num;
        }
Ejemplo n.º 6
0
        // Token: 0x06000146 RID: 326 RVA: 0x0000D348 File Offset: 0x0000B548
        private static SubItemToken StartSubItem(object instance, ProtoWriter writer, bool allowFixed)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            int num = writer.depth + 1;

            writer.depth = num;
            if (num > 25)
            {
                writer.CheckRecursionStackAndPush(instance);
            }
            if (writer.packedFieldNumber != 0)
            {
                throw new InvalidOperationException("Cannot begin a sub-item while performing packed encoding");
            }
            switch (writer.wireType)
            {
            case WireType.String:
                writer.wireType = WireType.None;
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                writer.position++;
                num            = writer.ioIndex;
                writer.ioIndex = num + 1;
                return(new SubItemToken(num));

            case WireType.StartGroup:
                writer.wireType = WireType.None;
                return(new SubItemToken(-writer.fieldNumber));

            case WireType.Fixed32:
            {
                if (!allowFixed)
                {
                    throw ProtoWriter.CreateException(writer);
                }
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                SubItemToken result = new SubItemToken(writer.ioIndex);
                ProtoWriter.IncrementedAndReset(4, writer);
                return(result);
            }
            }
            throw ProtoWriter.CreateException(writer);
        }
Ejemplo n.º 7
0
        // Token: 0x060034C3 RID: 13507 RVA: 0x001320A0 File Offset: 0x001304A0
        public static void WriteBytes(byte[] data, int offset, int length, ProtoWriter writer)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            WireType wireType = writer.wireType;

            if (wireType != WireType.Fixed32)
            {
                if (wireType != WireType.Fixed64)
                {
                    if (wireType != WireType.String)
                    {
                        throw ProtoWriter.CreateException(writer);
                    }
                    ProtoWriter.WriteUInt32Variant((uint)length, writer);
                    writer.wireType = WireType.None;
                    if (length == 0)
                    {
                        return;
                    }
                    if (writer.flushLock == 0 && length > writer.ioBuffer.Length)
                    {
                        ProtoWriter.Flush(writer);
                        writer.dest.Write(data, offset, length);
                        writer.position += length;
                        return;
                    }
                }
                else if (length != 8)
                {
                    throw new ArgumentException("length");
                }
            }
            else if (length != 4)
            {
                throw new ArgumentException("length");
            }
            ProtoWriter.DemandSpace(length, writer);
            Helpers.BlockCopy(data, offset, writer.ioBuffer, writer.ioIndex, length);
            ProtoWriter.IncrementedAndReset(length, writer);
        }
Ejemplo n.º 8
0
        // Token: 0x06000153 RID: 339 RVA: 0x0000D700 File Offset: 0x0000B900
        private static void WriteUInt32Variant(uint value, ProtoWriter writer)
        {
            ProtoWriter.DemandSpace(5, writer);
            int num = 0;

            do
            {
                byte[] array = writer.ioBuffer;
                int    num2  = writer.ioIndex;
                writer.ioIndex = num2 + 1;
                array[num2]    = (byte)((value & 127u) | 128u);
                num++;
            }while ((value >>= 7) != 0u);
            byte[] array2 = writer.ioBuffer;
            int    num3   = writer.ioIndex - 1;

            array2[num3]    &= 127;
            writer.position += num;
        }
Ejemplo n.º 9
0
        private static void WriteUInt32Variant(uint value, ProtoWriter writer)
        {
            UInt32 num;

            ProtoWriter.DemandSpace(5, writer);
            int num1 = 0;

            do
            {
                byte[]      numArray    = writer.ioBuffer;
                ProtoWriter protoWriter = writer;
                int         num2        = protoWriter.ioIndex;
                int         num3        = num2;
                protoWriter.ioIndex = num2 + 1;
                numArray[num3]      = (byte)(value & 127 | 128);
                num1++;
                num   = value >> 7;
                value = num;
            }while (num != 0);
            ref byte numPointer = ref writer.ioBuffer[writer.ioIndex - 1];
Ejemplo n.º 10
0
        private static void CopyRawFromStream(Stream source, ProtoWriter writer)
        {
            byte[] array = writer.ioBuffer;
            int    num   = array.Length - writer.ioIndex;
            int    num2  = 1;

            while (num > 0 && (num2 = source.Read(array, writer.ioIndex, num)) > 0)
            {
                writer.ioIndex  += num2;
                writer.position += num2;
                num             -= num2;
            }
            if (num2 <= 0)
            {
                return;
            }
            if (writer.flushLock == 0)
            {
                ProtoWriter.Flush(writer);
                while ((num2 = source.Read(array, 0, array.Length)) > 0)
                {
                    writer.dest.Write(array, 0, num2);
                    writer.position += num2;
                }
            }
            else
            {
                while (true)
                {
                    ProtoWriter.DemandSpace(128, writer);
                    if ((num2 = source.Read(writer.ioBuffer, writer.ioIndex, writer.ioBuffer.Length - writer.ioIndex)) <= 0)
                    {
                        break;
                    }
                    writer.position += num2;
                    writer.ioIndex  += num2;
                }
            }
        }
Ejemplo n.º 11
0
        public static void WriteInt64(long value, ProtoWriter writer)
        {
            byte[] numArray;
            int    num;

            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            ProtoBuf.WireType wireType = writer.wireType;
            switch (wireType)
            {
            case ProtoBuf.WireType.Variant:
            {
                if (value >= (long)0)
                {
                    ProtoWriter.WriteUInt64Variant((ulong)value, writer);
                    writer.wireType = ProtoBuf.WireType.None;
                    return;
                }
                ProtoWriter.DemandSpace(10, writer);
                numArray          = writer.ioBuffer;
                num               = writer.ioIndex;
                numArray[num]     = (byte)(value | (long)128);
                numArray[num + 1] = (byte)((int)(value >> 7) | 128);
                numArray[num + 2] = (byte)((int)(value >> 14) | 128);
                numArray[num + 3] = (byte)((int)(value >> 21) | 128);
                numArray[num + 4] = (byte)((int)(value >> 28) | 128);
                numArray[num + 5] = (byte)((int)(value >> 35) | 128);
                numArray[num + 6] = (byte)((int)(value >> 42) | 128);
                numArray[num + 7] = (byte)((int)(value >> 49) | 128);
                numArray[num + 8] = (byte)((int)(value >> 56) | 128);
                numArray[num + 9] = 1;
                ProtoWriter.IncrementedAndReset(10, writer);
                return;
            }

            case ProtoBuf.WireType.Fixed64:
            {
                ProtoWriter.DemandSpace(8, writer);
                numArray          = writer.ioBuffer;
                num               = writer.ioIndex;
                numArray[num]     = (byte)value;
                numArray[num + 1] = (byte)(value >> 8);
                numArray[num + 2] = (byte)(value >> 16);
                numArray[num + 3] = (byte)(value >> 24);
                numArray[num + 4] = (byte)(value >> 32);
                numArray[num + 5] = (byte)(value >> 40);
                numArray[num + 6] = (byte)(value >> 48);
                numArray[num + 7] = (byte)(value >> 56);
                ProtoWriter.IncrementedAndReset(8, writer);
                return;
            }

            default:
            {
                if (wireType == ProtoBuf.WireType.Fixed32)
                {
                    break;
                }
                else
                {
                    if (wireType != ProtoBuf.WireType.SignedVariant)
                    {
                        throw ProtoWriter.CreateException(writer);
                    }
                    ProtoWriter.WriteUInt64Variant(ProtoWriter.Zig(value), writer);
                    writer.wireType = ProtoBuf.WireType.None;
                    return;
                }
            }
            }
            ProtoWriter.WriteInt32(checked ((int)value), writer);
        }
Ejemplo n.º 12
0
        public static void WriteInt32(int value, ProtoWriter writer)
        {
            byte[] numArray;
            int    num;

            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            ProtoBuf.WireType wireType = writer.wireType;
            switch (wireType)
            {
            case ProtoBuf.WireType.Variant:
            {
                if (value >= 0)
                {
                    ProtoWriter.WriteUInt32Variant((uint)value, writer);
                    writer.wireType = ProtoBuf.WireType.None;
                    return;
                }
                ProtoWriter.DemandSpace(10, writer);
                numArray          = writer.ioBuffer;
                num               = writer.ioIndex;
                numArray[num]     = (byte)(value | 128);
                numArray[num + 1] = (byte)(value >> 7 | 128);
                numArray[num + 2] = (byte)(value >> 14 | 128);
                numArray[num + 3] = (byte)(value >> 21 | 128);
                numArray[num + 4] = (byte)(value >> 28 | 128);
                int  num1 = 255;
                byte num2 = (byte)num1;
                numArray[num + 8] = (byte)num1;
                byte num3 = num2;
                byte num4 = num3;
                numArray[num + 7] = num3;
                byte num5 = num4;
                byte num6 = num5;
                numArray[num + 6] = num5;
                numArray[num + 5] = num6;
                numArray[num + 9] = 1;
                ProtoWriter.IncrementedAndReset(10, writer);
                return;
            }

            case ProtoBuf.WireType.Fixed64:
            {
                ProtoWriter.DemandSpace(8, writer);
                numArray          = writer.ioBuffer;
                num               = writer.ioIndex;
                numArray[num]     = (byte)value;
                numArray[num + 1] = (byte)(value >> 8);
                numArray[num + 2] = (byte)(value >> 16);
                numArray[num + 3] = (byte)(value >> 24);
                int  num7 = 0;
                byte num8 = (byte)num7;
                numArray[num + 7] = (byte)num7;
                byte num9  = num8;
                byte num10 = num9;
                numArray[num + 6] = num9;
                byte num11 = num10;
                byte num12 = num11;
                numArray[num + 5] = num11;
                numArray[num + 4] = num12;
                ProtoWriter.IncrementedAndReset(8, writer);
                return;
            }

            default:
            {
                if (wireType == ProtoBuf.WireType.Fixed32)
                {
                    break;
                }
                else
                {
                    if (wireType != ProtoBuf.WireType.SignedVariant)
                    {
                        throw ProtoWriter.CreateException(writer);
                    }
                    ProtoWriter.WriteUInt32Variant(ProtoWriter.Zig(value), writer);
                    writer.wireType = ProtoBuf.WireType.None;
                    return;
                }
            }
            }
            ProtoWriter.DemandSpace(4, writer);
            ProtoWriter.WriteInt32ToBuffer(value, writer.ioBuffer, writer.ioIndex);
            ProtoWriter.IncrementedAndReset(4, writer);
        }
Ejemplo n.º 13
0
        public static void WriteBytes(byte[] data, int offset, int length, ProtoWriter writer)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            switch (writer.wireType)
            {
            case ProtoBuf.WireType.Fixed64:
            {
                if (length == 8)
                {
                    break;
                }
                throw new ArgumentException("length");
            }

            case ProtoBuf.WireType.String:
            {
                ProtoWriter.WriteUInt32Variant((uint)length, writer);
                writer.wireType = ProtoBuf.WireType.None;
                if (length == 0)
                {
                    return;
                }
                if (writer.flushLock != 0 || length <= (int)writer.ioBuffer.Length)
                {
                    break;
                }
                ProtoWriter.Flush(writer);
                writer.dest.Write(data, offset, length);
                writer.position += length;
                return;
            }

            case ProtoBuf.WireType.StartGroup:
            case ProtoBuf.WireType.EndGroup:
            {
                throw ProtoWriter.CreateException(writer);
            }

            case ProtoBuf.WireType.Fixed32:
            {
                if (length == 4)
                {
                    break;
                }
                throw new ArgumentException("length");
            }

            default:
            {
                throw ProtoWriter.CreateException(writer);
            }
            }
            ProtoWriter.DemandSpace(length, writer);
            Helpers.BlockCopy(data, offset, writer.ioBuffer, writer.ioIndex, length);
            ProtoWriter.IncrementedAndReset(length, writer);
        }
Ejemplo n.º 14
0
        private static SubItemToken StartSubItem(object instance, ProtoWriter writer, bool allowFixed)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            ProtoWriter protoWriter = writer;
            int         num         = protoWriter.depth + 1;
            int         num1        = num;

            protoWriter.depth = num;
            if (num1 > 25)
            {
                writer.CheckRecursionStackAndPush(instance);
            }
            if (writer.packedFieldNumber != 0)
            {
                throw new InvalidOperationException("Cannot begin a sub-item while performing packed encoding");
            }
            switch (writer.wireType)
            {
            case ProtoBuf.WireType.String:
            {
                writer.wireType = ProtoBuf.WireType.None;
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                writer.position++;
                ProtoWriter protoWriter1 = writer;
                int         num2         = protoWriter1.ioIndex;
                int         num3         = num2;
                protoWriter1.ioIndex = num2 + 1;
                return(new SubItemToken(num3));
            }

            case ProtoBuf.WireType.StartGroup:
            {
                writer.wireType = ProtoBuf.WireType.None;
                return(new SubItemToken(-writer.fieldNumber));
            }

            case ProtoBuf.WireType.EndGroup:
            {
                throw ProtoWriter.CreateException(writer);
            }

            case ProtoBuf.WireType.Fixed32:
            {
                if (!allowFixed)
                {
                    throw ProtoWriter.CreateException(writer);
                }
                ProtoWriter.DemandSpace(32, writer);
                writer.flushLock++;
                SubItemToken subItemToken = new SubItemToken(writer.ioIndex);
                ProtoWriter.IncrementedAndReset(4, writer);
                return(subItemToken);
            }

            default:
            {
                throw ProtoWriter.CreateException(writer);
            }
            }
        }
Ejemplo n.º 15
0
        private static void EndSubItem(SubItemToken token, ProtoWriter writer, PrefixStyle style)
        {
            int    num;
            UInt32 num1;

            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (writer.wireType != ProtoBuf.WireType.None)
            {
                throw ProtoWriter.CreateException(writer);
            }
            int num2 = token.@value;

            if (writer.depth <= 0)
            {
                throw ProtoWriter.CreateException(writer);
            }
            ProtoWriter protoWriter = writer;
            int         num3        = protoWriter.depth;
            int         num4        = num3;

            protoWriter.depth = num3 - 1;
            if (num4 > 25)
            {
                writer.PopRecursionStack();
            }
            writer.packedFieldNumber = 0;
            if (num2 < 0)
            {
                ProtoWriter.WriteHeaderCore(-num2, ProtoBuf.WireType.EndGroup, writer);
                writer.wireType = ProtoBuf.WireType.None;
                return;
            }
            switch (style)
            {
            case PrefixStyle.Base128:
            {
                num = writer.ioIndex - num2 - 1;
                int  num5 = 0;
                uint num6 = (uint)num;
                while (true)
                {
                    UInt32 num7 = num6 >> 7;
                    num6 = num7;
                    if (num7 == 0)
                    {
                        break;
                    }
                    num5++;
                }
                if (num5 != 0)
                {
                    ProtoWriter.DemandSpace(num5, writer);
                    byte[] numArray = writer.ioBuffer;
                    Helpers.BlockCopy(numArray, num2 + 1, numArray, num2 + 1 + num5, num);
                    num6 = (uint)num;
                    do
                    {
                        int num8 = num2;
                        num2           = num8 + 1;
                        numArray[num8] = (byte)(num6 & 127 | 128);
                        num1           = num6 >> 7;
                        num6           = num1;
                    }while (num1 != 0);
                    numArray[num2 - 1] = (byte)(numArray[num2 - 1] & -129);
                    writer.position   += num5;
                    writer.ioIndex    += num5;
                    break;
                }
                else
                {
                    writer.ioBuffer[num2] = (byte)(num & 127);
                    break;
                }
            }

            case PrefixStyle.Fixed32:
            {
                num = writer.ioIndex - num2 - 4;
                ProtoWriter.WriteInt32ToBuffer(num, writer.ioBuffer, num2);
                break;
            }

            case PrefixStyle.Fixed32BigEndian:
            {
                num = writer.ioIndex - num2 - 4;
                byte[] numArray1 = writer.ioBuffer;
                ProtoWriter.WriteInt32ToBuffer(num, numArray1, num2);
                byte num9 = numArray1[num2];
                numArray1[num2]     = numArray1[num2 + 3];
                numArray1[num2 + 3] = num9;
                num9 = numArray1[num2 + 1];
                numArray1[num2 + 1] = numArray1[num2 + 2];
                numArray1[num2 + 2] = num9;
                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException("style");
            }
            }
            ProtoWriter protoWriter1 = writer;
            int         num10        = protoWriter1.flushLock - 1;
            int         num11        = num10;

            protoWriter1.flushLock = num10;
            if (num11 == 0 && writer.ioIndex >= 1024)
            {
                ProtoWriter.Flush(writer);
            }
        }
Ejemplo n.º 16
0
        // Token: 0x06000159 RID: 345 RVA: 0x0000D8C4 File Offset: 0x0000BAC4
        public static void WriteInt64(long value, ProtoWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            WireType wireType = writer.wireType;

            if (wireType <= WireType.Fixed64)
            {
                if (wireType != WireType.Variant)
                {
                    if (wireType == WireType.Fixed64)
                    {
                        ProtoWriter.DemandSpace(8, writer);
                        byte[] array = writer.ioBuffer;
                        int    num   = writer.ioIndex;
                        array[num]     = (byte)value;
                        array[num + 1] = (byte)(value >> 8);
                        array[num + 2] = (byte)(value >> 16);
                        array[num + 3] = (byte)(value >> 24);
                        array[num + 4] = (byte)(value >> 32);
                        array[num + 5] = (byte)(value >> 40);
                        array[num + 6] = (byte)(value >> 48);
                        array[num + 7] = (byte)(value >> 56);
                        ProtoWriter.IncrementedAndReset(8, writer);
                        return;
                    }
                }
                else
                {
                    if (value >= 0L)
                    {
                        ProtoWriter.WriteUInt64Variant((ulong)value, writer);
                        writer.wireType = WireType.None;
                        return;
                    }
                    ProtoWriter.DemandSpace(10, writer);
                    byte[] array2 = writer.ioBuffer;
                    int    num    = writer.ioIndex;
                    array2[num]     = (byte)(value | 128L);
                    array2[num + 1] = (byte)((int)(value >> 7) | 128);
                    array2[num + 2] = (byte)((int)(value >> 14) | 128);
                    array2[num + 3] = (byte)((int)(value >> 21) | 128);
                    array2[num + 4] = (byte)((int)(value >> 28) | 128);
                    array2[num + 5] = (byte)((int)(value >> 35) | 128);
                    array2[num + 6] = (byte)((int)(value >> 42) | 128);
                    array2[num + 7] = (byte)((int)(value >> 49) | 128);
                    array2[num + 8] = (byte)((int)(value >> 56) | 128);
                    array2[num + 9] = 1;
                    ProtoWriter.IncrementedAndReset(10, writer);
                    return;
                }
            }
            else
            {
                if (wireType == WireType.Fixed32)
                {
                    ProtoWriter.WriteInt32(checked ((int)value), writer);
                    return;
                }
                if (wireType == WireType.SignedVariant)
                {
                    ProtoWriter.WriteUInt64Variant(ProtoWriter.Zig(value), writer);
                    writer.wireType = WireType.None;
                    return;
                }
            }
            throw ProtoWriter.CreateException(writer);
        }
Ejemplo n.º 17
0
        public static void WriteInt32(int value, ProtoWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            WireType wireType = writer.wireType;

            switch (wireType)
            {
            case WireType.Variant:
                if (value >= 0)
                {
                    ProtoWriter.WriteUInt32Variant((uint)value, writer);
                    writer.wireType = WireType.None;
                }
                else
                {
                    ProtoWriter.DemandSpace(10, writer);
                    byte[] array = writer.ioBuffer;
                    int    num   = writer.ioIndex;
                    array[num]     = (byte)(value | 128);
                    array[num + 1] = (byte)(value >> 7 | 128);
                    array[num + 2] = (byte)(value >> 14 | 128);
                    array[num + 3] = (byte)(value >> 21 | 128);
                    array[num + 4] = (byte)(value >> 28 | 128);
                    array[num + 5] = (array[num + 6] = (array[num + 7] = (array[num + 8] = 255)));
                    array[num + 9] = 1;
                    ProtoWriter.IncrementedAndReset(10, writer);
                }
                return;

            case WireType.Fixed64:
            {
                ProtoWriter.DemandSpace(8, writer);
                byte[] array = writer.ioBuffer;
                int    num   = writer.ioIndex;
                array[num]     = (byte)value;
                array[num + 1] = (byte)(value >> 8);
                array[num + 2] = (byte)(value >> 16);
                array[num + 3] = (byte)(value >> 24);
                array[num + 4] = (array[num + 5] = (array[num + 6] = (array[num + 7] = 0)));
                ProtoWriter.IncrementedAndReset(8, writer);
                return;
            }

            case WireType.String:
            case WireType.StartGroup:
            case WireType.EndGroup:
IL_36:
                if (wireType != WireType.SignedVariant)
                {
                    throw ProtoWriter.CreateException(writer);
                }
                ProtoWriter.WriteUInt32Variant(ProtoWriter.Zig(value), writer);
                writer.wireType = WireType.None;
                return;

            case WireType.Fixed32:
                ProtoWriter.DemandSpace(4, writer);
                ProtoWriter.WriteInt32ToBuffer(value, writer.ioBuffer, writer.ioIndex);
                ProtoWriter.IncrementedAndReset(4, writer);
                return;
            }
            goto IL_36;
        }
Ejemplo n.º 18
0
        private static void EndSubItem(SubItemToken token, ProtoWriter writer, PrefixStyle style)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (writer.wireType != WireType.None)
            {
                throw ProtoWriter.CreateException(writer);
            }
            int value = token.value;

            if (writer.depth <= 0)
            {
                throw ProtoWriter.CreateException(writer);
            }
            if (writer.depth-- > 25)
            {
                writer.PopRecursionStack();
            }
            writer.packedFieldNumber = 0;
            if (value < 0)
            {
                ProtoWriter.WriteHeaderCore(-value, WireType.EndGroup, writer);
                writer.wireType = WireType.None;
                return;
            }
            switch (style)
            {
            case PrefixStyle.Base128:
            {
                int  num  = writer.ioIndex - value - 1;
                int  num2 = 0;
                uint num3 = (uint)num;
                while ((num3 >>= 7) != 0u)
                {
                    num2++;
                }
                if (num2 == 0)
                {
                    writer.ioBuffer[value] = (byte)(num & 127);
                }
                else
                {
                    ProtoWriter.DemandSpace(num2, writer);
                    byte[] array = writer.ioBuffer;
                    Helpers.BlockCopy(array, value + 1, array, value + 1 + num2, num);
                    num3 = (uint)num;
                    do
                    {
                        array[value++] = (byte)((num3 & 127u) | 128u);
                    }while ((num3 >>= 7) != 0u);
                    array[value - 1] = (byte)((int)array[value - 1] & -129);
                    writer.position += num2;
                    writer.ioIndex  += num2;
                }
                break;
            }

            case PrefixStyle.Fixed32:
            {
                int num = writer.ioIndex - value - 4;
                ProtoWriter.WriteInt32ToBuffer(num, writer.ioBuffer, value);
                break;
            }

            case PrefixStyle.Fixed32BigEndian:
            {
                int    num    = writer.ioIndex - value - 4;
                byte[] array2 = writer.ioBuffer;
                ProtoWriter.WriteInt32ToBuffer(num, array2, value);
                byte b = array2[value];
                array2[value]     = array2[value + 3];
                array2[value + 3] = b;
                b = array2[value + 1];
                array2[value + 1] = array2[value + 2];
                array2[value + 2] = b;
                break;
            }

            default:
                throw new ArgumentOutOfRangeException("style");
            }
            if (--writer.flushLock == 0 && writer.ioIndex >= 1024)
            {
                ProtoWriter.Flush(writer);
            }
        }
Ejemplo n.º 19
0
        // Token: 0x06000160 RID: 352 RVA: 0x0000DAB0 File Offset: 0x0000BCB0
        public static void WriteInt32(int value, ProtoWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            WireType wireType = writer.wireType;

            if (wireType <= WireType.Fixed64)
            {
                if (wireType != WireType.Variant)
                {
                    if (wireType == WireType.Fixed64)
                    {
                        ProtoWriter.DemandSpace(8, writer);
                        byte[] array = writer.ioBuffer;
                        int    num   = writer.ioIndex;
                        array[num]     = (byte)value;
                        array[num + 1] = (byte)(value >> 8);
                        array[num + 2] = (byte)(value >> 16);
                        array[num + 3] = (byte)(value >> 24);
                        array[num + 4] = (array[num + 5] = (array[num + 6] = (array[num + 7] = 0)));
                        ProtoWriter.IncrementedAndReset(8, writer);
                        return;
                    }
                }
                else
                {
                    if (value >= 0)
                    {
                        ProtoWriter.WriteUInt32Variant((uint)value, writer);
                        writer.wireType = WireType.None;
                        return;
                    }
                    ProtoWriter.DemandSpace(10, writer);
                    byte[] array = writer.ioBuffer;
                    int    num   = writer.ioIndex;
                    array[num]     = (byte)(value | 128);
                    array[num + 1] = (byte)(value >> 7 | 128);
                    array[num + 2] = (byte)(value >> 14 | 128);
                    array[num + 3] = (byte)(value >> 21 | 128);
                    array[num + 4] = (byte)(value >> 28 | 128);
                    array[num + 5] = (array[num + 6] = (array[num + 7] = (array[num + 8] = byte.MaxValue)));
                    array[num + 9] = 1;
                    ProtoWriter.IncrementedAndReset(10, writer);
                    return;
                }
            }
            else
            {
                if (wireType == WireType.Fixed32)
                {
                    ProtoWriter.DemandSpace(4, writer);
                    ProtoWriter.WriteInt32ToBuffer(value, writer.ioBuffer, writer.ioIndex);
                    ProtoWriter.IncrementedAndReset(4, writer);
                    return;
                }
                if (wireType == WireType.SignedVariant)
                {
                    ProtoWriter.WriteUInt32Variant(ProtoWriter.Zig(value), writer);
                    writer.wireType = WireType.None;
                    return;
                }
            }
            throw ProtoWriter.CreateException(writer);
        }