using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;

namespace CommonUtils
{
	public static class CompressedSerializer
	{
		/// <summary> 
		/// Decompresses the specified compressed data. 
		/// </summary> 
		/// <typeparam name="T"></typeparam> 
		/// <param name="compressedData">The compressed data.</param> 
		/// <returns></returns> 
		public static T Decompress<T>(byte[] compressedData) where T : class
		{
			T result = null;
			using (MemoryStream memory = new MemoryStream())
			{
				DataContractSerializer ser = new DataContractSerializer(typeof(T));
				byte[] outArray = Cellbi.SvZLib.Utils.Decompress(compressedData);

				memory.Write(outArray, 0, outArray.Length);
				memory.Position = 0;
				result = ser.ReadObject(memory) as T;
			}
			return result;
		}
		/// <summary> 
		/// Compresses the specified data. 
		/// </summary> 
		/// <typeparam name="T"></typeparam> 
		/// <param name="data">The data.</param> 
		/// <returns></returns> 
		public static byte[] Compress<T>(T data)
		{
			byte[] result = null;
			using (MemoryStream memory = new MemoryStream())
			{
				DataContractSerializer ser = new DataContractSerializer(typeof(T));
				ser.WriteObject(memory, data);
				byte[] array = memory.ToArray();

				result = Cellbi.SvZLib.Utils.Compress(array);
			}
			return result;
		}
	} 
}