static private Flush ( |
||
writer | The writer to flush | |
Résultat | void |
private void Dispose() { if (this.dest != null) { ProtoWriter.Flush(this); this.dest = null; } this.model = null; BufferPool.ReleaseBufferToPool(ref this.ioBuffer); }
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; } }
private static void DemandSpace(int required, ProtoWriter writer) { if ((int)writer.ioBuffer.Length - writer.ioIndex < required) { if (writer.flushLock == 0) { ProtoWriter.Flush(writer); if ((int)writer.ioBuffer.Length - writer.ioIndex >= required) { return; } } BufferPool.ResizeAndFlushLeft(ref writer.ioBuffer, required + writer.ioIndex, 0, writer.ioIndex); } }
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); }
// 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); }
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; } } }
private static void EndSubItem(SubItemToken token, ProtoWriter writer, PrefixStyle style) { if (writer == null) { throw new ArgumentNullException("writer"); } if (writer.wireType != WireType.None) { throw CreateException(writer); } int value = token.value; if (writer.depth <= 0) { throw CreateException(writer); } if (writer.depth-- > RecursionCheckDepth) { writer.PopRecursionStack(); } writer.packedFieldNumber = 0; // ending the sub-item always wipes packed encoding if (value < 0) { // group - very simple append WriteHeaderCore(-value, WireType.EndGroup, writer); writer.wireType = WireType.None; return; } // so we're backfilling the length into an existing sequence int len; switch (style) { case PrefixStyle.Fixed32: len = (int)((writer.ioIndex - value) - 4); ProtoWriter.WriteInt32ToBuffer(len, writer.ioBuffer, value); break; case PrefixStyle.Fixed32BigEndian: len = (int)((writer.ioIndex - value) - 4); byte[] buffer = writer.ioBuffer; ProtoWriter.WriteInt32ToBuffer(len, buffer, value); // and swap the byte order byte b = buffer[value]; buffer[value] = buffer[value + 3]; buffer[value + 3] = b; b = buffer[value + 1]; buffer[value + 1] = buffer[value + 2]; buffer[value + 2] = b; break; case PrefixStyle.Base128: // string - complicated because we only reserved one byte; // if the prefix turns out to need more than this then // we need to shuffle the existing data len = (int)((writer.ioIndex - value) - 1); int offset = 0; uint tmp = (uint)len; while ((tmp >>= 7) != 0) { offset++; } if (offset == 0) { writer.ioBuffer[value] = (byte)(len & 0x7F); } else { DemandSpace(offset, writer); byte[] blob = writer.ioBuffer; Helpers.BlockCopy(blob, value + 1, blob, value + 1 + offset, len); tmp = (uint)len; do { blob[value++] = (byte)((tmp & 0x7F) | 0x80); } while ((tmp >>= 7) != 0); blob[value - 1] = (byte)(blob[value - 1] & ~0x80); writer.position += offset; writer.ioIndex += offset; } break; default: throw new ArgumentOutOfRangeException("style"); } // and this object is no longer a blockage - also flush if sensible const int ADVISORY_FLUSH_SIZE = 1024; if (--writer.flushLock == 0 && writer.ioIndex >= ADVISORY_FLUSH_SIZE) { ProtoWriter.Flush(writer); } }
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); }
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); } }
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); } }