# E.S.O. - VLT project/ESO Archive
# $Id: Compress.man3,v 1.1.1.1 2009/03/31 14:11:52 cguirao Exp $
#
# This file is processed by the ESO/VLT docDoManPages command to
# produce a man page in nroff, TeX and MIF formats. 
# See docDoManPages(1) for a description of the input format.
# 
# who             when       what
# --------------  ---------  ----------------------------------------
# Allan Brighton  15 Jan 98  Created
#

NAME
Compress - utility class for compressing/decompressing FITS files

SYNOPSIS
class Compress {
protected:

public:
    enum CompressType {
	NO_COMPRESS,		// no compression
	UNIX_COMPRESS,		// Compressed FITS file (UNIX)
	H_COMPRESS,		// Hcompressed FITS file
	ULDA_COMPRESS,		// ULDA compressed FITS file
	GZIP_COMPRESS		// GZIPed FITS file
    };


    Compress();

    int compress(int read_fd, int write_fd, CompressType type, 
		 int compress_flag = 1);

    int decompress(int read_fd, int write_fd, CompressType type);

    int compress(const char* infile, const char* outfile, CompressType type, 
		 int compress_flag = 1, int mmap_flag = 1);

    int decompress(const char* infile, const char* outfile, CompressType type,
		   int mmap_flag = 1);

    int compress(const char* file, CompressType type, int compress_flag = 1, 
		 int mmap_flag = 1);

    int decompress(const char* file, CompressType type, int mmap_flag = 1);


    int compress(const char* inbuf, int inbufsz, char*& outbuf, int& outbufsz, 
		       CompressType ctype, int compress_flag = 1);

    int decompress(const char* inbuf, int inbufsz, char*& outbuf, int& outbufsz, 
		   CompressType ctype);
   
};

DESCRIPTION
This class is a C++ wrapper around the CADC "press" routines for FITS
image compression. The methods all do the same thing: compress or
decompress an image.  Some methods take file names as arguments,
others pointers to memory areas. The type of compression is specified
as an enum value "CompressType". 

The methods called "compress" all take an optional flag argument that
indicates compression or decompression. The methods called
"decompress" are shortcut, inline methods that call compress with the
decompress flag on.

CONSTRUCTORS
Compress()
	Initialize the object.

METHODS
compress(read_fd, write_fd, type, compress_flag)
	Compress (or decompress), reading from the given read file
	descriptor and writing the results to the given write fd. If
	compress_flag is true, compress, otherwise decompress the
	file.

decompress(read_fd, write_fd, type)
	Decompress, reading from the given read file descriptor and
	writing the results to the given write fd.

compress(infile, outfile, type, compress_flag, mmap_flag)
	Compress (or decompress) the given input file and put the
	result in outfile.  If compress_flag is true, compress,
	otherwise decompress the file.  If mmap_flag is true, use mmap
	to map the file to memory.  Note: we can just open the file
	and use the fd, but the "press" C routines do unbuffered I/O
	on each char, which is slow. We can mmap the file to memory
	and use the "mem to mem" version to improve speed somewhat.

decompress(infile, outfile, type, mmap_flag)
	Decompress the given input file and put the result in outfile.

compress(file, type, compress_flag, mmap_flag)
	Compress (decompress) the file in place using the given
	compress type.  If compress_flag is true, compress, otherwise
	decompress the file.

decompress(file, type, mmap_flag)
	Decompress the file in place.

compress(inbuf, inbufsz, outbuf, outbufsz, ctype, compress_flag)
	Compress (or decompress) the contents of inbuf using the given
	compress type and allocate the results to outbuf.  inbufsz is
	the size of the input buffer.  outbufsz is an estimate of the
	outbuf size on input and the actual size on output.  If
	compress_flag is true, compress, otherwise decompress the
	file.  It is the caller's responsibility to free() the outbuf
	when no longer needed.

decompress(inbuf, inbufsz, outbuf, outbufsz, ctype)
	Decompress inbuf and allocate results in outbuf.

----------------------------------------------------------------------
