static void WriteDouble(double value, ProtoWriter writer) { if (writer == null) { throw new ArgumentNullException("writer"); } switch (writer.wireType) { case WireType.Fixed32: float f = (float)value; if (Helpers.IsInfinity(f) && !Helpers.IsInfinity(value)) { throw new OverflowException(); } ProtoWriter.WriteSingle(f, writer); return; case WireType.Fixed64: #if FEAT_SAFE ProtoWriter.WriteInt64(BitConverter.ToInt64(BitConverter.GetBytes(value), 0), writer); #else ProtoWriter.WriteInt64(*(long *)&value, writer); #endif return; default: throw CreateException(writer); } }