/*
 * Created by SharpDevelop.
 * User: Petteri Kautonen
 * Date: 26.11.2006
 * Time: 20:58
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

namespace VPKSoft
{
    /// <summary>
    /// Description of SimpleCompressor.
    /// </summary>
    public class SimpleCompressor
    {
        public SimpleCompressor()
        {
        }
        
        public static bool SkipHeaders = false;
        
        public static byte [] Compress(byte [] Bytes)
        {
            MemoryStream Ms = new MemoryStream();
            Deflater Def = new Deflater(9, SkipHeaders);
            DeflaterOutputStream Dos = new DeflaterOutputStream(Ms, Def);
            Dos.Write(Bytes, 0, Bytes.Length);
            Dos.Flush();
            Dos.Finish();
            Dos.Close();
            return Ms.GetBuffer();            
        }

        public static byte [] Decompress(byte [] Bytes)
        {
            MemoryStream Ms = new MemoryStream();
            MemoryStream Ms2 = new MemoryStream();
            Ms.Write(Bytes, 0, Bytes.Length);
            Ms.Position = 0;
            Inflater Inf = new Inflater(SkipHeaders);
            InflaterInputStream Iis = new InflaterInputStream(Ms, Inf);
            byte [] Buffer = new byte [Bytes.Length];
            int Length;
            do {
                Length = Iis.Read(Buffer, 0, Buffer.Length);
                Ms2.Write(Buffer, 0, Length);
            } while (Length > 0);
            
            Iis.Close();
            Ms.Close();
            return Ms2.GetBuffer();
        }
    }
}