* Fixed a typo in OpenJPEG.J2KLayerInfo (only affected debug display) git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3118 52acb1d6-8a22-11de-b505-999d5b087335
558 lines
18 KiB
C#
558 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.IO;
|
|
|
|
namespace CSJ2K.Util
|
|
{
|
|
internal class EndianBinaryWriter : BinaryWriter
|
|
{
|
|
private bool _bigEndian = false;
|
|
|
|
//
|
|
// Summary:
|
|
// Initializes a new instance of the System.IO.BinaryWriter class based on the
|
|
// supplied stream and using UTF-8 as the encoding for strings.
|
|
//
|
|
// Parameters:
|
|
// output:
|
|
// The output stream.
|
|
//
|
|
// Exceptions:
|
|
// System.ArgumentException:
|
|
// The stream does not support writing, or the stream is already closed.
|
|
//
|
|
// System.ArgumentNullException:
|
|
// output is null.
|
|
public EndianBinaryWriter(Stream input) : base(input)
|
|
{
|
|
}
|
|
//
|
|
// Summary:
|
|
// Initializes a new instance of the System.IO.BinaryWriter class based on the
|
|
// supplied stream and a specific character encoding.
|
|
//
|
|
// Parameters:
|
|
// encoding:
|
|
// The character encoding.
|
|
//
|
|
// output:
|
|
// The supplied stream.
|
|
//
|
|
// Exceptions:
|
|
// System.ArgumentNullException:
|
|
// output or encoding is null.
|
|
//
|
|
// System.ArgumentException:
|
|
// The stream does not support writing, or the stream is already closed.
|
|
public EndianBinaryWriter(Stream input, Encoding encoding) : base(input, encoding)
|
|
{
|
|
|
|
}
|
|
public EndianBinaryWriter(Stream input, Encoding encoding, bool bigEndian)
|
|
: base(input, encoding)
|
|
{
|
|
_bigEndian = bigEndian;
|
|
}
|
|
|
|
public EndianBinaryWriter(Stream input, bool bigEndian) : base(input, bigEndian ? Encoding.BigEndianUnicode : Encoding.ASCII)
|
|
{
|
|
_bigEndian = bigEndian;
|
|
}
|
|
|
|
// Summary:
|
|
// Gets the underlying stream of the System.IO.BinaryWriter.
|
|
//
|
|
// Returns:
|
|
// The underlying stream associated with the BinaryWriter.
|
|
//public virtual Stream BaseStream { get; }
|
|
|
|
// Summary:
|
|
// Closes the current System.IO.BinaryWriter and the underlying stream.
|
|
//public virtual void Close();
|
|
//
|
|
// Summary:
|
|
// Releases the unmanaged resources used by the System.IO.BinaryWriter and optionally
|
|
// releases the managed resources.
|
|
//
|
|
// Parameters:
|
|
// disposing:
|
|
// true to release both managed and unmanaged resources; false to release only
|
|
// unmanaged resources.
|
|
//protected virtual void Dispose(bool disposing);
|
|
//
|
|
// Summary:
|
|
// Clears all buffers for the current writer and causes any buffered data to
|
|
// be written to the underlying device.
|
|
//public virtual void Flush();
|
|
//
|
|
// Summary:
|
|
// Sets the position within the current stream.
|
|
//
|
|
// Parameters:
|
|
// offset:
|
|
// A byte offset relative to origin.
|
|
//
|
|
// origin:
|
|
// A field of System.IO.SeekOrigin indicating the reference point from which
|
|
// the new position is to be obtained.
|
|
//
|
|
// Returns:
|
|
// The position with the current stream.
|
|
//
|
|
// Exceptions:
|
|
// System.ArgumentException:
|
|
// The System.IO.SeekOrigin value is invalid.
|
|
//
|
|
// System.IO.IOException:
|
|
// The file pointer was moved to an invalid location.
|
|
//public virtual long Seek(int offset, SeekOrigin origin);
|
|
//
|
|
// Summary:
|
|
// Writes a one-byte Boolean value to the current stream, with 0 representing
|
|
// false and 1 representing true.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The Boolean value to write (0 or 1).
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//public virtual void Write(bool value);
|
|
//
|
|
// Summary:
|
|
// Writes an unsigned byte to the current stream and advances the stream position
|
|
// by one byte.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The unsigned byte to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//public virtual void Write(byte value);
|
|
//
|
|
// Summary:
|
|
// Writes a byte array to the underlying stream.
|
|
//
|
|
// Parameters:
|
|
// buffer:
|
|
// A byte array containing the data to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ArgumentNullException:
|
|
// buffer is null.
|
|
//
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//public virtual void Write(byte[] buffer);
|
|
//
|
|
// Summary:
|
|
// Writes a Unicode character to the current stream and advances the current
|
|
// position of the stream in accordance with the Encoding used and the specific
|
|
// characters being written to the stream.
|
|
//
|
|
// Parameters:
|
|
// ch:
|
|
// The non-surrogate, Unicode character to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.ArgumentException:
|
|
// ch is a single surrogate character.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//public virtual void Write(char ch);
|
|
//
|
|
// Summary:
|
|
// Writes a character array to the current stream and advances the current position
|
|
// of the stream in accordance with the Encoding used and the specific characters
|
|
// being written to the stream.
|
|
//
|
|
// Parameters:
|
|
// chars:
|
|
// A character array containing the data to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//
|
|
// System.ArgumentNullException:
|
|
// chars is null.
|
|
//public virtual void Write(char[] chars);
|
|
//
|
|
// Summary:
|
|
// Writes a decimal value to the current stream and advances the stream position
|
|
// by sixteen bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The decimal value to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(decimal value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
throw new System.NotImplementedException();
|
|
/*
|
|
int[] decimalints=decimal.GetBits(value);
|
|
|
|
// TODO: Is the whole thing reversed or just the individual ints?
|
|
// Maybe we should just call ReadInt32 4 times?
|
|
//byte[] buf = this.ReadBytes(16);
|
|
//Array.Reverse(buf);
|
|
//int[] decimalints = new int[4];
|
|
//decimalints[0] = BitConverter.ToInt32(buf, 0);
|
|
//decimalints[1] = BitConverter.ToInt32(buf, 4);
|
|
//decimalints[2] = BitConverter.ToInt32(buf, 8);
|
|
//decimalints[3] = BitConverter.ToInt32(buf, 12);
|
|
//return new decimal(decimalints);
|
|
*/
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes an eight-byte floating-point value to the current stream and advances
|
|
// the stream position by eight bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The eight-byte floating-point value to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(double value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a four-byte floating-point value to the current stream and advances
|
|
// the stream position by four bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The four-byte floating-point value to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(float value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a four-byte signed integer to the current stream and advances the
|
|
// stream position by four bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The four-byte signed integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(int value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes an eight-byte signed integer to the current stream and advances the
|
|
// stream position by eight bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The eight-byte signed integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(long value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a signed byte to the current stream and advances the stream position
|
|
// by one byte.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The signed byte to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//[CLSCompliant(false)]
|
|
//public virtual void Write(sbyte value);
|
|
//
|
|
// Summary:
|
|
// Writes a two-byte signed integer to the current stream and advances the stream
|
|
// position by two bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The two-byte signed integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(short value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a length-prefixed string to this stream in the current encoding of
|
|
// the System.IO.BinaryWriter, and advances the current position of the stream
|
|
// in accordance with the encoding used and the specific characters being written
|
|
// to the stream.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The value to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//
|
|
// System.ArgumentNullException:
|
|
// value is null.
|
|
//public virtual void Write(string value);
|
|
//
|
|
// Summary:
|
|
// Writes a four-byte unsigned integer to the current stream and advances the
|
|
// stream position by four bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The four-byte unsigned integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(uint value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes an eight-byte unsigned integer to the current stream and advances
|
|
// the stream position by eight bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The eight-byte unsigned integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(ulong value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a two-byte unsigned integer to the current stream and advances the
|
|
// stream position by two bytes.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The two-byte unsigned integer to write.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
public override void Write(ushort value)
|
|
{
|
|
if (_bigEndian)
|
|
{
|
|
byte[] buf = BitConverter.GetBytes(value);
|
|
Array.Reverse(buf);
|
|
base.Write(buf);
|
|
}
|
|
else base.Write(value);
|
|
}
|
|
//
|
|
// Summary:
|
|
// Writes a region of a byte array to the current stream.
|
|
//
|
|
// Parameters:
|
|
// count:
|
|
// The number of bytes to write.
|
|
//
|
|
// buffer:
|
|
// A byte array containing the data to write.
|
|
//
|
|
// index:
|
|
// The starting point in buffer at which to begin writing.
|
|
//
|
|
// Exceptions:
|
|
// System.ArgumentNullException:
|
|
// buffer is null.
|
|
//
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.ArgumentOutOfRangeException:
|
|
// index or count is negative.
|
|
//
|
|
// System.ArgumentException:
|
|
// The buffer length minus index is less than count.
|
|
//public virtual void Write(byte[] buffer, int index, int count);
|
|
//
|
|
// Summary:
|
|
// Writes a section of a character array to the current stream, and advances
|
|
// the current position of the stream in accordance with the Encoding used and
|
|
// perhaps the specific characters being written to the stream.
|
|
//
|
|
// Parameters:
|
|
// chars:
|
|
// A character array containing the data to write.
|
|
//
|
|
// count:
|
|
// The number of characters to write.
|
|
//
|
|
// index:
|
|
// The starting point in buffer from which to begin writing.
|
|
//
|
|
// Exceptions:
|
|
// System.IO.IOException:
|
|
// An I/O error occurs.
|
|
//
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.ArgumentOutOfRangeException:
|
|
// index or count is negative.
|
|
//
|
|
// System.ArgumentException:
|
|
// The buffer length minus index is less than count.
|
|
//
|
|
// System.ArgumentNullException:
|
|
// chars is null.
|
|
//public virtual void Write(char[] chars, int index, int count);
|
|
//
|
|
// Summary:
|
|
// Writes a 32-bit integer in a compressed format.
|
|
//
|
|
// Parameters:
|
|
// value:
|
|
// The 32-bit integer to be written.
|
|
//
|
|
// Exceptions:
|
|
// System.ObjectDisposedException:
|
|
// The stream is closed.
|
|
//
|
|
// System.IO.EndOfStreamException:
|
|
// The end of the stream is reached.
|
|
//
|
|
// System.IO.IOException:
|
|
// The stream is closed.
|
|
//protected void Write7BitEncodedInt(int value)
|
|
|
|
}
|
|
}
|