using System.IO;
using System.Text;

namespace ComponentAce.Compression.Libs.zlib;

public class SupportClass
{
	public static long Identity(long literal)
	{
		return literal;
	}

	public static ulong Identity(ulong literal)
	{
		return literal;
	}

	public static float Identity(float literal)
	{
		return literal;
	}

	public static double Identity(double literal)
	{
		return literal;
	}

	public static int URShift(int number, int bits)
	{
		if (number >= 0)
		{
			return number >> bits;
		}
		return (number >> bits) + (2 << ~bits);
	}

	public static int URShift(int number, long bits)
	{
		return URShift(number, (int)bits);
	}

	public static long URShift(long number, int bits)
	{
		if (number >= 0)
		{
			return number >> bits;
		}
		return (number >> bits) + (2L << ~bits);
	}

	public static long URShift(long number, long bits)
	{
		return URShift(number, (int)bits);
	}

	public static int ReadInput(Stream sourceStream, byte[] target, int start, int count)
	{
		if (target.Length == 0)
		{
			return 0;
		}
		byte[] array = new byte[target.Length];
		int num = sourceStream.Read(array, start, count);
		if (num == 0)
		{
			return -1;
		}
		for (int i = start; i < start + num; i++)
		{
			target[i] = array[i];
		}
		return num;
	}

	public static int ReadInput(TextReader sourceTextReader, byte[] target, int start, int count)
	{
		if (target.Length == 0)
		{
			return 0;
		}
		char[] array = new char[target.Length];
		int num = sourceTextReader.Read(array, start, count);
		if (num == 0)
		{
			return -1;
		}
		for (int i = start; i < start + num; i++)
		{
			target[i] = (byte)array[i];
		}
		return num;
	}

	public static byte[] ToByteArray(string sourceString)
	{
		return Encoding.UTF8.GetBytes(sourceString);
	}

	public static char[] ToCharArray(byte[] byteArray)
	{
		return Encoding.UTF8.GetChars(byteArray);
	}
}