using System; namespace ThoughtWorks.QRCode.Codec.Util { /// /// Contains conversion support elements such as classes, interfaces and static methods. /// public class SystemUtils { /// 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, sbyte[] 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] = (sbyte)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, short[] 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] = (short)charArray[index]; return bytesRead; } /*******************************/ /// /// 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(); } /// /// 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); } /*******************************/ /// /// Converts an array of sbytes to an array of bytes /// /// The array of sbytes to be converted /// The new array of bytes public static byte[] ToByteArray(sbyte[] sbyteArray) { byte[] byteArray = null; if (sbyteArray != null) { byteArray = new byte[sbyteArray.Length]; for (int index = 0; index < sbyteArray.Length; index++) byteArray[index] = (byte)sbyteArray[index]; } return byteArray; } /// /// Converts a string to an array of bytes /// /// The string to be converted /// The new array of bytes public static byte[] ToByteArray(String sourceString) { return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString); } /// /// Converts a array of object-type instances to a byte-type array. /// /// Array to convert. /// An array of byte type elements. public static byte[] ToByteArray(System.Object[] tempObjectArray) { byte[] byteArray = null; if (tempObjectArray != null) { byteArray = new byte[tempObjectArray.Length]; for (int index = 0; index < tempObjectArray.Length; index++) byteArray[index] = (byte)tempObjectArray[index]; } return byteArray; } /*******************************/ /// /// Receives a byte array and returns it transformed in an sbyte array /// /// Byte array to process /// The transformed array public static sbyte[] ToSByteArray(byte[] byteArray) { sbyte[] sbyteArray = null; if (byteArray != null) { sbyteArray = new sbyte[byteArray.Length]; for (int index = 0; index < byteArray.Length; index++) sbyteArray[index] = (sbyte)byteArray[index]; } return sbyteArray; } /*******************************/ /// /// Converts an array of sbytes to an array of chars /// /// The array of sbytes to convert /// The new array of chars public static char[] ToCharArray(sbyte[] sByteArray) { return System.Text.UTF8Encoding.UTF8.GetChars(ToByteArray(sByteArray)); } /// /// 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); } } }