| |
| using System; |
| |
| |
| namespace ComponentAce.Compression.Libs.zlib |
| { |
| public 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); |
| } |
| |
| |
| } |
| } |