using System;
/* Contains conversion support elements such as classes, interfaces and static methods. */
namespace zlib
{
class SupportClass
{
///
/// This method returns the literal value received
///
/// The literal to return
/// The received value
public static long Identity(long literal)
{
return literal;
}
///
/// This method returns the literal value received
///
/// The literal to return
/// The received value
public static ulong Identity(ulong literal)
{
return literal;
}
///
/// This method returns the literal value received
///
/// The literal to return
/// The received value
public static float Identity(float literal)
{
return literal;
}
///
/// This method returns the literal value received
///
/// The literal to return
/// The received value
public static double Identity(double literal)
{
return literal;
}
/*******************************/
///
/// Performs an unsigned bitwise right shift with the specified number
///
/// Number to operate on
/// Ammount of bits to shift
/// The resulting number from the shift operation
public static int URShift(int number, int bits)
{
if ( number >= 0)
return number >> bits;
else
return (number >> bits) + (2 << ~bits);
}
///
/// Performs an unsigned bitwise right shift with the specified number
///
/// Number to operate on
/// Ammount of bits to shift
/// The resulting number from the shift operation
public static int URShift(int number, long bits)
{
return URShift(number, (int)bits);
}
///
/// Performs an unsigned bitwise right shift with the specified number
///
/// Number to operate on
/// Ammount of bits to shift
/// The resulting number from the shift operation
public static long URShift(long number, int bits)
{
if ( number >= 0)
return number >> bits;
else
return (number >> bits) + (2L << ~bits);
}
///
/// Performs an unsigned bitwise right shift with the specified number
///
/// Number to operate on
/// Ammount of bits to shift
/// The resulting number from the shift operation
public static long URShift(long number, long bits)
{
return URShift(number, (int)bits);
}
/*******************************/
/// Reads a number of characters from the current source Stream and writes the data to the target array at the specified index.
/// The source Stream to read from.
/// Contains the array of characteres read from the source Stream.
/// The starting index of the target array.
/// The maximum number of characters to read from the source Stream.
/// The number of characters read. The number will be less than or equal to count depending on the data available in the source Stream. Returns -1 if the end of the stream is reached.
public static System.Int32 ReadInput(System.IO.Stream sourceStream, byte[] target, int start, int count)
{
// Returns 0 bytes if not enough space in target
if (target.Length == 0)
return 0;
byte[] receiver = new byte[target.Length];
int bytesRead = sourceStream.Read(receiver, start, count);
// Returns -1 if EOF
if (bytesRead == 0)
return -1;
for(int i = start; i < start + bytesRead; i++)
target[i] = (byte)receiver[i];
return bytesRead;
}
/// Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index.
/// The source TextReader to read from
/// Contains the array of characteres read from the source TextReader.
/// The starting index of the target array.
/// The maximum number of characters to read from the source TextReader.
/// The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached.
public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count)
{
// Returns 0 bytes if not enough space in target
if (target.Length == 0) return 0;
char[] charArray = new char[target.Length];
int bytesRead = sourceTextReader.Read(charArray, start, count);
// Returns -1 if EOF
if (bytesRead == 0) return -1;
for(int index=start; index
/// Converts a string to an array of bytes
///
/// The string to be converted
/// The new array of bytes
public static byte[] ToByteArray(System.String sourceString)
{
return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);
}
///
/// Converts an array of bytes to an array of chars
///
/// The array of bytes to convert
/// The new array of chars
public static char[] ToCharArray(byte[] byteArray)
{
return System.Text.UTF8Encoding.UTF8.GetChars(byteArray);
}
#if !CF
/*******************************/
///
/// Writes an object to the specified Stream
///
/// The target Stream
/// The object to be sent
public static void Serialize(System.IO.Stream stream, System.Object objectToSend)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(stream, objectToSend);
}
///
/// Writes an object to the specified BinaryWriter
///
/// The target BinaryWriter
/// The object to be sent
public static void Serialize(System.IO.BinaryWriter binaryWriter, System.Object objectToSend)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(binaryWriter.BaseStream, objectToSend);
}
/*******************************/
///
/// Deserializes an object, or an entire graph of connected objects, and returns the object intance
///
/// Reader instance used to read the object
/// The object instance
public static System.Object Deserialize(System.IO.BinaryReader binaryReader)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
return formatter.Deserialize(binaryReader.BaseStream);
}
#endif
/*******************************/
///
/// Writes the exception stack trace to the received stream
///
/// Exception to obtain information from
/// Output sream used to write to
public static void WriteStackTrace(System.Exception throwable, System.IO.TextWriter stream)
{
stream.Write(throwable.StackTrace);
stream.Flush();
}
}
}