You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
8.2 KiB
219 lines
8.2 KiB
15 years ago
|
using System;
|
||
|
|
||
|
/* Contains conversion support elements such as classes, interfaces and static methods. */
|
||
|
namespace zlib
|
||
|
{
|
||
|
class SupportClass
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// This method returns the literal value received
|
||
|
/// </summary>
|
||
|
/// <param name="literal">The literal to return</param>
|
||
|
/// <returns>The received value</returns>
|
||
|
public static long Identity(long literal)
|
||
|
{
|
||
|
return literal;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// This method returns the literal value received
|
||
|
/// </summary>
|
||
|
/// <param name="literal">The literal to return</param>
|
||
|
/// <returns>The received value</returns>
|
||
|
public static ulong Identity(ulong literal)
|
||
|
{
|
||
|
return literal;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// This method returns the literal value received
|
||
|
/// </summary>
|
||
|
/// <param name="literal">The literal to return</param>
|
||
|
/// <returns>The received value</returns>
|
||
|
public static float Identity(float literal)
|
||
|
{
|
||
|
return literal;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// This method returns the literal value received
|
||
|
/// </summary>
|
||
|
/// <param name="literal">The literal to return</param>
|
||
|
/// <returns>The received value</returns>
|
||
|
public static double Identity(double literal)
|
||
|
{
|
||
|
return literal;
|
||
|
}
|
||
|
|
||
|
/*******************************/
|
||
|
/// <summary>
|
||
|
/// Performs an unsigned bitwise right shift with the specified number
|
||
|
/// </summary>
|
||
|
/// <param name="number">Number to operate on</param>
|
||
|
/// <param name="bits">Ammount of bits to shift</param>
|
||
|
/// <returns>The resulting number from the shift operation</returns>
|
||
|
public static int URShift(int number, int bits)
|
||
|
{
|
||
|
if ( number >= 0)
|
||
|
return number >> bits;
|
||
|
else
|
||
|
return (number >> bits) + (2 << ~bits);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Performs an unsigned bitwise right shift with the specified number
|
||
|
/// </summary>
|
||
|
/// <param name="number">Number to operate on</param>
|
||
|
/// <param name="bits">Ammount of bits to shift</param>
|
||
|
/// <returns>The resulting number from the shift operation</returns>
|
||
|
public static int URShift(int number, long bits)
|
||
|
{
|
||
|
return URShift(number, (int)bits);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Performs an unsigned bitwise right shift with the specified number
|
||
|
/// </summary>
|
||
|
/// <param name="number">Number to operate on</param>
|
||
|
/// <param name="bits">Ammount of bits to shift</param>
|
||
|
/// <returns>The resulting number from the shift operation</returns>
|
||
|
public static long URShift(long number, int bits)
|
||
|
{
|
||
|
if ( number >= 0)
|
||
|
return number >> bits;
|
||
|
else
|
||
|
return (number >> bits) + (2L << ~bits);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Performs an unsigned bitwise right shift with the specified number
|
||
|
/// </summary>
|
||
|
/// <param name="number">Number to operate on</param>
|
||
|
/// <param name="bits">Ammount of bits to shift</param>
|
||
|
/// <returns>The resulting number from the shift operation</returns>
|
||
|
public static long URShift(long number, long bits)
|
||
|
{
|
||
|
return URShift(number, (int)bits);
|
||
|
}
|
||
|
|
||
|
/*******************************/
|
||
|
/// <summary>Reads a number of characters from the current source Stream and writes the data to the target array at the specified index.</summary>
|
||
|
/// <param name="sourceStream">The source Stream to read from.</param>
|
||
|
/// <param name="target">Contains the array of characteres read from the source Stream.</param>
|
||
|
/// <param name="start">The starting index of the target array.</param>
|
||
|
/// <param name="count">The maximum number of characters to read from the source Stream.</param>
|
||
|
/// <returns>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.</returns>
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
/// <summary>Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index.</summary>
|
||
|
/// <param name="sourceTextReader">The source TextReader to read from</param>
|
||
|
/// <param name="target">Contains the array of characteres read from the source TextReader.</param>
|
||
|
/// <param name="start">The starting index of the target array.</param>
|
||
|
/// <param name="count">The maximum number of characters to read from the source TextReader.</param>
|
||
|
/// <returns>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.</returns>
|
||
|
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<start+bytesRead; index++)
|
||
|
target[index] = (byte)charArray[index];
|
||
|
|
||
|
return bytesRead;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Converts a string to an array of bytes
|
||
|
/// </summary>
|
||
|
/// <param name="sourceString">The string to be converted</param>
|
||
|
/// <returns>The new array of bytes</returns>
|
||
|
public static byte[] ToByteArray(System.String sourceString)
|
||
|
{
|
||
|
return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Converts an array of bytes to an array of chars
|
||
|
/// </summary>
|
||
|
/// <param name="byteArray">The array of bytes to convert</param>
|
||
|
/// <returns>The new array of chars</returns>
|
||
|
public static char[] ToCharArray(byte[] byteArray)
|
||
|
{
|
||
|
return System.Text.UTF8Encoding.UTF8.GetChars(byteArray);
|
||
|
}
|
||
|
|
||
|
#if !CF
|
||
|
/*******************************/
|
||
|
/// <summary>
|
||
|
/// Writes an object to the specified Stream
|
||
|
/// </summary>
|
||
|
/// <param name="stream">The target Stream</param>
|
||
|
/// <param name="objectToSend">The object to be sent</param>
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Writes an object to the specified BinaryWriter
|
||
|
/// </summary>
|
||
|
/// <param name="binaryWriter">The target BinaryWriter</param>
|
||
|
/// <param name="objectToSend">The object to be sent</param>
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
/*******************************/
|
||
|
/// <summary>
|
||
|
/// Deserializes an object, or an entire graph of connected objects, and returns the object intance
|
||
|
/// </summary>
|
||
|
/// <param name="binaryReader">Reader instance used to read the object</param>
|
||
|
/// <returns>The object instance</returns>
|
||
|
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
|
||
|
|
||
|
/*******************************/
|
||
|
/// <summary>
|
||
|
/// Writes the exception stack trace to the received stream
|
||
|
/// </summary>
|
||
|
/// <param name="throwable">Exception to obtain information from</param>
|
||
|
/// <param name="stream">Output sream used to write to</param>
|
||
|
public static void WriteStackTrace(System.Exception throwable, System.IO.TextWriter stream)
|
||
|
{
|
||
|
stream.Write(throwable.StackTrace);
|
||
|
stream.Flush();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|