/*
 * COPYENGN.H
 *
 *  Header file for ArchiveLib 1.0
 *
 *  Copyright (c) 1994 Greenleaf Software, Inc.
 *  All Rights Reserved
 *
 * DESCRIPTION
 *
 *  This header file contains the class definition for the derived
 *  class ALCopyEngine.
 * 
 * CLASS DEFINITIONS:
 *
 *  ALCopyEngine
 *
 * REVISION HISTORY
 *
 *  May 26, 1994  1.0A  : First release
 *
 */

#ifndef _COPYENG_H
#define _COPYENG_H

#include "arclib.h"

#if defined( __cplusplus )

#include "cmpengn.h"
#include "storage.h"

/*
 * class ALOpenInputFile 
 *
 * DESCRIPTION
 *
 * ALCopyEngine is a full fledged compression engine.  It just
 * copies files from input to output, instead of doing something
 * exciting like making them smaller.  Its principal virtue is that it
 * is very fast.  If you are packing a bunch of files into an archive,
 * and don't particularly need to compress them, you can use an instance of
 * ALCopyEngine and get your work done quickly.
 *
 * DATA MEMBERS
 *
 *   None.
 *
 * MEMBER FUNCTIONS
 *
 *  ALCopyEngine()      : The one and only constructor.
 *  ~ALCopyEngine()     : The virtual destructor.
 *  operator new()      : Memory allocation operator, only used when the
 *                        library is in a DLL.
 *  Compress()          : The virtual compression function.
 *  Decompress()        : The virtual decompression function.
 *
 * REVISION HISTORY
 *
 *  May 26, 1994  1.0A  : First release
 *
 */

class AL_CLASS_TYPE ALCopyEngine : public ALCompressionEngine {
/*
 * Constructors, destructors, declarations, friends
 */
    public :
        AL_PROTO ALCopyEngine();
        virtual AL_PROTO ~ALCopyEngine();
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
        void AL_DLL_FAR * AL_PROTO operator new( size_t size );
#endif
/*
 * Member functions
 */
    public :
        virtual int AL_PROTO Compress( ALStorage AL_DLL_FAR &input,
                                       ALStorage AL_DLL_FAR &output );
        virtual int AL_PROTO Decompress( ALStorage AL_DLL_FAR &input,
                                         ALStorage AL_DLL_FAR &output,
                                         long compressed_length = -1 );
/*
 * Data members
 */
    public :
        AL_CLASS_TAG( _ALCompressedObjectTag );
};

#endif /* #if defined( __cplusplus ) */

#endif /* #ifndef _COPYENG_H         */