/** @file
 Compress class.

 This class is to call CompressDll.dll to compress section.
 
 Copyright (c) 2006, Intel Corporation
 All rights reserved. This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
 http://opensource.org/licenses/bsd-license.php
 
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

 **/

package org.tianocore.framework.tasks;

import java.io.File;

/**

  This class is to call CompressDll.dll to compress section.
 
**/
public class Compress {
    byte[] inputBuffer;
    byte[] outputBuffer;
    int    size;

    static {
        String dllPath;

        dllPath = GenFfsFileTask.path;
        dllPath = dllPath + 
                  File.separator + 
                  "CompressDll.dll";

        System.load(dllPath);
    }

    /**
      CallCompress
    
      This function is to call the compressDll.dll to compress the contents in
      buffer.
      
      @param  inputBuffer       The input buffer.
      @param  size              The size of buffer in byte.
      @param  dllPath           The compressDll.dll path.
      @return                   The buffer contained the comrpessed input.
    **/
    public native byte[] CallCompress (byte[] inputBuffer, int size, String dllPath);

    /**
      Construct function
      
      This function is to initialize the class member and call the compress 
      function.
      
      @param inBuffer           The input buffer.         
      @param size               The size of buffer in byte.
    **/
    public Compress (byte[] inBuffer, int size){
        this.inputBuffer   = inBuffer;
        this.size          = size;        
        String path        = GenFfsFileTask.path;

        //
        //  Call Compress function.
        //
        this.outputBuffer  = CallCompress (
                                          this.inputBuffer, 
                                          this.size,
                                          path                          
                                          );
    }
}