using System;
using System.Text;
using System.Globalization;
+using Mono.Security;
+using System.Runtime.InteropServices;
namespace System.IO {
[Serializable]
+ [ComVisible (true)]
public class BinaryWriter : IDisposable {
// Null is a BinaryWriter with no backing store.
private byte [] buffer;
private bool disposed = false;
- protected BinaryWriter() : this (Stream.Null, Encoding.UTF8Unmarked) {
+ protected BinaryWriter() : this (Stream.Null, Encoding.UTF8UnmarkedUnsafe) {
}
- public BinaryWriter(Stream output) : this(output, Encoding.UTF8Unmarked) {
+ public BinaryWriter(Stream output) : this(output, Encoding.UTF8UnmarkedUnsafe) {
}
public BinaryWriter(Stream output, Encoding encoding) {
- if (output == null || encoding == null)
- throw new ArgumentNullException(Locale.GetText ("Output or Encoding is a null reference."));
+ if (output == null)
+ throw new ArgumentNullException("output");
+ if (encoding == null)
+ throw new ArgumentNullException("encoding");
if (!output.CanWrite)
throw new ArgumentException(Locale.GetText ("Stream does not support writing or already closed."));
Dispose (true);
}
- void IDisposable.Dispose() {
+#if NET_4_0
+ public void Dispose ()
+#else
+ void IDisposable.Dispose()
+#endif
+ {
Dispose (true);
}
OutStream.WriteByte(value);
}
- public virtual void Write(byte[] value) {
+ public virtual void Write(byte[] buffer) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- if (value == null)
- throw new ArgumentNullException(Locale.GetText ("Byte buffer is a null reference."));
- OutStream.Write(value, 0, value.Length);
+ if (buffer == null)
+ throw new ArgumentNullException("buffer");
+ OutStream.Write(buffer, 0, buffer.Length);
}
- public virtual void Write(byte[] value, int offset, int length) {
+ public virtual void Write(byte[] buffer, int index, int count) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- if (value == null)
- throw new ArgumentNullException(Locale.GetText ("Byte buffer is a null reference."));
- OutStream.Write(value, offset, length);
+ if (buffer == null)
+ throw new ArgumentNullException("buffer");
+ OutStream.Write(buffer, index, count);
}
- public virtual void Write(char value) {
+ public virtual void Write(char ch) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
char[] dec = new char[1];
- dec[0] = value;
+ dec[0] = ch;
byte[] enc = m_encoding.GetBytes(dec, 0, 1);
OutStream.Write(enc, 0, enc.Length);
}
- public virtual void Write(char[] value) {
+ public virtual void Write(char[] chars) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- if (value == null)
- throw new ArgumentNullException(Locale.GetText ("Chars is a null reference."));
- byte[] enc = m_encoding.GetBytes(value, 0, value.Length);
+ if (chars == null)
+ throw new ArgumentNullException("chars");
+ byte[] enc = m_encoding.GetBytes(chars, 0, chars.Length);
OutStream.Write(enc, 0, enc.Length);
}
- public virtual void Write(char[] value, int offset, int length) {
+ public virtual void Write(char[] chars, int index, int count) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- if (value == null)
- throw new ArgumentNullException(Locale.GetText ("Chars is a null reference."));
- byte[] enc = m_encoding.GetBytes(value, offset, length);
+ if (chars == null)
+ throw new ArgumentNullException("chars");
+ byte[] enc = m_encoding.GetBytes(chars, index, count);
OutStream.Write(enc, 0, enc.Length);
}
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
byte* value_ptr = (byte *)&value;
- for (int i = 0; i < 16; i++) {
-
- /*
- * decimal in stream is lo32, mi32, hi32, ss32
- * but its internal structure si ss32, hi32, lo32, mi32
- */
- if (i < 4)
- buffer [i + 12] = value_ptr [i];
- else if (i < 8)
- buffer [i + 4] = value_ptr [i];
- else if (i < 12)
- buffer [i - 8] = value_ptr [i];
- else
- buffer [i - 8] = value_ptr [i];
+
+ /*
+ * decimal in stream is lo32, mi32, hi32, ss32
+ * but its internal structure si ss32, hi32, lo32, mi32
+ */
+
+ if (BitConverter.IsLittleEndian) {
+ for (int i = 0; i < 16; i++) {
+ if (i < 4)
+ buffer [i + 12] = value_ptr [i];
+ else if (i < 8)
+ buffer [i + 4] = value_ptr [i];
+ else if (i < 12)
+ buffer [i - 8] = value_ptr [i];
+ else
+ buffer [i - 8] = value_ptr [i];
+ }
+ } else {
+ for (int i = 0; i < 16; i++) {
+ if (i < 4)
+ buffer [15 - i] = value_ptr [i];
+ else if (i < 8)
+ buffer [15 - i] = value_ptr [i];
+ else if (i < 12)
+ buffer [11 - i] = value_ptr [i];
+ else
+ buffer [19 - i] = value_ptr [i];
+ }
}
OutStream.Write(buffer, 0, 16);
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- OutStream.Write(BitConverter.GetBytes(value), 0, 8);
+ OutStream.Write(BitConverterLE.GetBytes(value), 0, 8);
}
public virtual void Write(short value) {
if (disposed)
throw new ObjectDisposedException ("BinaryWriter", "Cannot write to a closed BinaryWriter");
- OutStream.Write(BitConverter.GetBytes(value), 0, 4);
+ OutStream.Write(BitConverterLE.GetBytes(value), 0, 4);
}
byte [] stringBuffer;