private void WriteValue(ResourceTypeCode typeCode, object value, BinaryWriter writer, IFormatter objFormatter) { switch (typeCode) { case ResourceTypeCode.Null: break; case ResourceTypeCode.String: writer.Write((string)value); break; case ResourceTypeCode.Boolean: writer.Write((bool)value); break; case ResourceTypeCode.Char: writer.Write((ushort)(char)value); break; case ResourceTypeCode.Byte: writer.Write((byte)value); break; case ResourceTypeCode.SByte: writer.Write((sbyte)value); break; case ResourceTypeCode.Int16: writer.Write((short)value); break; case ResourceTypeCode.UInt16: writer.Write((ushort)value); break; case ResourceTypeCode.Int32: writer.Write((int)value); break; case ResourceTypeCode.UInt32: writer.Write((uint)value); break; case ResourceTypeCode.Int64: writer.Write((long)value); break; case ResourceTypeCode.UInt64: writer.Write((ulong)value); break; case ResourceTypeCode.Single: writer.Write((float)value); break; case ResourceTypeCode.Double: writer.Write((double)value); break; case ResourceTypeCode.Decimal: writer.Write((Decimal)value); break; case ResourceTypeCode.DateTime: long binary = ((DateTime)value).ToBinary(); writer.Write(binary); break; case ResourceTypeCode.TimeSpan: writer.Write(((TimeSpan)value).Ticks); break; case ResourceTypeCode.ByteArray: byte[] buffer1 = (byte[])value; writer.Write(buffer1.Length); writer.Write(buffer1, 0, buffer1.Length); break; case ResourceTypeCode.Stream: ResourceWriter.StreamWrapper streamWrapper = (ResourceWriter.StreamWrapper)value; if (streamWrapper.m_stream.GetType() == typeof(MemoryStream)) { MemoryStream memoryStream = (MemoryStream)streamWrapper.m_stream; if (memoryStream.Length > (long)int.MaxValue) { throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_StreamLength")); } int index; // ISSUE: explicit reference operation // ISSUE: variable of a reference type int& origin = @index; int count; // ISSUE: explicit reference operation // ISSUE: variable of a reference type int& length = @count; memoryStream.InternalGetOriginAndLength(origin, length); byte[] buffer2 = memoryStream.InternalGetBuffer(); writer.Write(count); writer.Write(buffer2, index, count); break; } Stream stream = streamWrapper.m_stream; if (stream.Length > (long)int.MaxValue) { throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_StreamLength")); } stream.Position = 0L; writer.Write((int)stream.Length); byte[] buffer3 = new byte[4096]; int count1; while ((count1 = stream.Read(buffer3, 0, buffer3.Length)) != 0) { writer.Write(buffer3, 0, count1); } if (!streamWrapper.m_closeAfterWrite) { break; } stream.Close(); break; default: objFormatter.Serialize(writer.BaseStream, value); break; } }
// Token: 0x06002C6C RID: 11372 RVA: 0x000A97FC File Offset: 0x000A79FC private void WriteValue(ResourceTypeCode typeCode, object value, BinaryWriter writer, IFormatter objFormatter) { switch (typeCode) { case ResourceTypeCode.Null: return; case ResourceTypeCode.String: writer.Write((string)value); return; case ResourceTypeCode.Boolean: writer.Write((bool)value); return; case ResourceTypeCode.Char: writer.Write((ushort)((char)value)); return; case ResourceTypeCode.Byte: writer.Write((byte)value); return; case ResourceTypeCode.SByte: writer.Write((sbyte)value); return; case ResourceTypeCode.Int16: writer.Write((short)value); return; case ResourceTypeCode.UInt16: writer.Write((ushort)value); return; case ResourceTypeCode.Int32: writer.Write((int)value); return; case ResourceTypeCode.UInt32: writer.Write((uint)value); return; case ResourceTypeCode.Int64: writer.Write((long)value); return; case ResourceTypeCode.UInt64: writer.Write((ulong)value); return; case ResourceTypeCode.Single: writer.Write((float)value); return; case ResourceTypeCode.Double: writer.Write((double)value); return; case ResourceTypeCode.Decimal: writer.Write((decimal)value); return; case ResourceTypeCode.DateTime: { long value2 = ((DateTime)value).ToBinary(); writer.Write(value2); return; } case ResourceTypeCode.TimeSpan: writer.Write(((TimeSpan)value).Ticks); return; case ResourceTypeCode.ByteArray: { byte[] array = (byte[])value; writer.Write(array.Length); writer.Write(array, 0, array.Length); return; } case ResourceTypeCode.Stream: { ResourceWriter.StreamWrapper streamWrapper = (ResourceWriter.StreamWrapper)value; if (streamWrapper.m_stream.GetType() == typeof(MemoryStream)) { MemoryStream memoryStream = (MemoryStream)streamWrapper.m_stream; if (memoryStream.Length > 2147483647L) { throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_StreamLength")); } int index; int num; memoryStream.InternalGetOriginAndLength(out index, out num); byte[] buffer = memoryStream.InternalGetBuffer(); writer.Write(num); writer.Write(buffer, index, num); return; } else { Stream stream = streamWrapper.m_stream; if (stream.Length > 2147483647L) { throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_StreamLength")); } stream.Position = 0L; writer.Write((int)stream.Length); byte[] array2 = new byte[4096]; int count; while ((count = stream.Read(array2, 0, array2.Length)) != 0) { writer.Write(array2, 0, count); } if (streamWrapper.m_closeAfterWrite) { stream.Close(); return; } return; } break; } } objFormatter.Serialize(writer.BaseStream, value); }