304 lines
11 KiB
C++
Executable File
304 lines
11 KiB
C++
Executable File
/*
|
|
* ENGN.H
|
|
*
|
|
* Header file for ArchiveLib 2.0
|
|
*
|
|
* Copyright (c) 1994 Greenleaf Software, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This header file contains the class declaration for ALEngine,
|
|
* the base class used by all ArchiveLib compression and decompression
|
|
* engines. It also contains the base class definition for two classes
|
|
* derived from ALEngine: ALCompressor and ALDecompressor.
|
|
*
|
|
* CLASS DEFINITIONS:
|
|
*
|
|
* ALEngine
|
|
* ALCompressor
|
|
* ALDecompressor
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* February 14, 1996 2.0A : New release
|
|
*/
|
|
|
|
#ifndef _CMPENGN_H
|
|
#define _CMPENGN_H
|
|
|
|
#if defined( __cplusplus )
|
|
|
|
|
|
/*
|
|
* class ALEngine
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This header file defines the ALEngine class. It is a base
|
|
* class with pure virtual functions, so it cannot be instantiated.
|
|
* The ALCompressor and ALDecompressor classes are both derived from
|
|
* ALEngine. ALEngine doesn't do any compression or decompression itself,
|
|
* but it does keep track of the compression type, error status, and a
|
|
* bunch of other useful stuff.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* miCompressionType : The compression type integer is what gets stored
|
|
* in the archive directory, and what the archive
|
|
* class looks at when extracting so it can figure
|
|
* out what type of compression engine to construct
|
|
* for a specific type of object.
|
|
*
|
|
* mszCompressionType : This string just describes the compression type
|
|
* in ASCII format suitable for printing or display.
|
|
*
|
|
* mStatus : A standard ArchiveLib status object, stored
|
|
* with the compression engine. Check this after
|
|
* completing a compression or decompression to
|
|
* see how things went.
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALEngine() : The constructor. Only called by the ctors for
|
|
* derived classes.
|
|
* ~ALEngine() : The virtual destructor.
|
|
* operator new() : Memory allocation operator, only gets used
|
|
* when the library is in a DLL.
|
|
* WriteEngineData() : Private virtual function used to store engine
|
|
* specific data.
|
|
* ReadEngineData() : Private virtual function used to read back
|
|
* engine specific data.
|
|
* ClearError() : A helper function used to reset the mStatus
|
|
* member if it gets in an error state.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* Februrary 14, 1996 2.0A : New release
|
|
*/
|
|
|
|
class AL_CLASS_TYPE ALEngine { /* Tag public class */
|
|
/*
|
|
* Constructors, destructors, declarations, and friends
|
|
*/
|
|
public :
|
|
AL_PROTO ALEngine( ALCompressionType compression_type_int,
|
|
const char AL_DLL_FAR *compression_type_string );
|
|
virtual AL_PROTO ~ALEngine();
|
|
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
|
|
void AL_DLL_FAR * AL_PROTO operator new( size_t size );
|
|
#endif
|
|
/*
|
|
* The copy constructor and assignment operator do not exist. I define
|
|
* them here to prevent the compiler from creating default versions.
|
|
*/
|
|
protected :
|
|
AL_PROTO ALEngine( ALEngine AL_DLL_FAR & );
|
|
ALEngine AL_DLL_FAR & AL_PROTO operator=( ALEngine AL_DLL_FAR & rhs );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
public :
|
|
virtual int AL_PROTO WriteEngineData( ALStorage AL_DLL_FAR * archive );
|
|
virtual int AL_PROTO ReadEngineData( ALStorage AL_DLL_FAR * archive );
|
|
void AL_PROTO ClearError();
|
|
/*
|
|
* Data members
|
|
*/
|
|
public :
|
|
const ALCompressionType miCompressionType;
|
|
const char AL_DLL_FAR *mszCompressionType;
|
|
ALStatus mStatus;
|
|
AL_CLASS_TAG( _ALEngineTag );
|
|
};
|
|
|
|
/*
|
|
* class ALCompressor
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* ALCompressor is the base class for all of the compression engines.
|
|
* It defines the virtual function Compress(), which is used by
|
|
* the archiving functions to perform compression. This is the base
|
|
* class for the three compressors in ArchiveLib: the copy, greenleaf,
|
|
* and Pkware compressors.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALCompressor() : The constructor. Only called by the ctors for
|
|
* derived classes.
|
|
* ~ALCompressor() : The virtual destructor.
|
|
* operator new() : Memory allocation operator, only gets used
|
|
* when the library is in a DLL.
|
|
* Clone() : If the engine is placed in a toolkit, this
|
|
* function can be called to provoke it into
|
|
* making a copy of itself.
|
|
* Compress() : Compress an input object to an output object.
|
|
* This is the big deal.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* Februrary 14, 1996 2.0A : New release
|
|
*/
|
|
|
|
class AL_CLASS_TYPE ALCompressor : public ALEngine { /* Tag public class */
|
|
/*
|
|
* Constructors, destructors, declarations, and friends
|
|
*/
|
|
public :
|
|
AL_PROTO ALCompressor( ALCompressionType compression_type_int,
|
|
const char AL_DLL_FAR *compression_type_string );
|
|
virtual AL_PROTO ~ALCompressor();
|
|
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
|
|
void AL_DLL_FAR * AL_PROTO operator new( size_t size );
|
|
#endif
|
|
/*
|
|
* The copy constructor and assignment operator do not exist. I define
|
|
* them here to prevent the compiler from creating default versions.
|
|
*/
|
|
protected :
|
|
AL_PROTO ALCompressor( ALCompressor AL_DLL_FAR & );
|
|
ALCompressor AL_DLL_FAR & AL_PROTO operator=( ALCompressor AL_DLL_FAR & rhs );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
public :
|
|
virtual ALCompressor AL_DLL_FAR * AL_PROTO Clone( int engine_type ) const = 0;
|
|
virtual int AL_PROTO Compress( ALStorage AL_DLL_FAR &input_object,
|
|
ALStorage AL_DLL_FAR &output_object ) = 0;
|
|
/*
|
|
* Data members
|
|
*/
|
|
public :
|
|
AL_CLASS_TAG( _ALCompressorTag );
|
|
};
|
|
|
|
/*
|
|
* class ALDecompressor
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* ALDecompressor is the base class for all of the decompression engines.
|
|
* It defines the virtual function Decompress(), which is used by
|
|
* the archiving functions to perform decompression. This is the base
|
|
* class for the three decompressors in ArchiveLib: the copy, greenleaf,
|
|
* and Pkware decompressors.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALDecompressor() : The constructor. Only called by the ctors for
|
|
* derived classes.
|
|
* ~ALDecompressor() : The virtual destructor.
|
|
* operator new() : Memory allocation operator, only gets used
|
|
* when the library is in a DLL.
|
|
* Clone() : If the engine is placed in a toolkit, this
|
|
* function can be called to provoke it into
|
|
* making a copy of itself.
|
|
* Decompress() : Decompress an input object to an output object.
|
|
* This is the big deal.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* Februrary 14, 1996 2.0A : New release
|
|
*/
|
|
|
|
class AL_CLASS_TYPE ALDecompressor : public ALEngine { /* Tag public class */
|
|
/*
|
|
* Constructors, destructors, declarations, and friends
|
|
*/
|
|
public :
|
|
AL_PROTO ALDecompressor( ALCompressionType compression_type_int,
|
|
const char AL_DLL_FAR *compression_type_string );
|
|
virtual AL_PROTO ~ALDecompressor();
|
|
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
|
|
void AL_DLL_FAR * AL_PROTO operator new( size_t size );
|
|
#endif
|
|
/*
|
|
* The copy constructor and assignment operator do not exist. I define
|
|
* them here to prevent the compiler from creating default versions.
|
|
*/
|
|
protected :
|
|
AL_PROTO ALDecompressor( ALDecompressor AL_DLL_FAR & );
|
|
ALDecompressor AL_DLL_FAR & AL_PROTO operator=( ALDecompressor AL_DLL_FAR & rhs );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
public :
|
|
virtual ALDecompressor AL_DLL_FAR * AL_PROTO Clone( int engine_type ) const = 0;
|
|
virtual int AL_PROTO Decompress( ALStorage AL_DLL_FAR &input_object,
|
|
ALStorage AL_DLL_FAR &output_object,
|
|
long compressed_length = -1L ) = 0;
|
|
/*
|
|
* Data members
|
|
*/
|
|
public :
|
|
AL_CLASS_TAG( _ALDecompressorTag );
|
|
};
|
|
|
|
#include "engn.inl"
|
|
|
|
#else /* #if defined( __cplusplus ) ... */
|
|
|
|
AL_LINKAGE void AL_FUNCTION ALDecompressorClearError( hALDecompressor this_object );
|
|
AL_LINKAGE int AL_FUNCTION ALCompress( hALCompressor this_object,
|
|
hALStorage input,
|
|
hALStorage output );
|
|
AL_LINKAGE int AL_FUNCTION ALDecompress( hALDecompressor this_object,
|
|
hALStorage input,
|
|
hALStorage output,
|
|
long compressed_length );
|
|
AL_LINKAGE void AL_FUNCTION deleteALCompressor( hALCompressor this_object );
|
|
AL_LINKAGE void AL_FUNCTION deleteALDecompressor( hALDecompressor this_object );
|
|
|
|
AL_LINKAGE void AL_FUNCTION ALCompressorClearError( hALCompressor this_object );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALCompressorSetError( hALCompressor this_object,
|
|
int error,
|
|
char AL_DLL_FAR *text );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALCompressorGetStatusCode( hALCompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALCompressorGetStatusString( hALCompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALCompressorGetStatusDetail( hALCompressor this_object );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALCompressorGetTypeCode( hALCompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALCompressorGetTypeString( hALCompressor this_object );
|
|
|
|
AL_LINKAGE void AL_FUNCTION ALDecompressorClearError( hALDecompressor this_object );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALDecompressorSetError( hALDecompressor this_object,
|
|
int error,
|
|
char AL_DLL_FAR *text );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALDecompressorGetStatusCode( hALDecompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALDecompressorGetStatusString( hALDecompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALDecompressorGetStatusDetail( hALDecompressor this_object );
|
|
AL_LINKAGE int AL_FUNCTION
|
|
ALDecompressorGetTypeCode( hALDecompressor this_object );
|
|
AL_LINKAGE char AL_DLL_FAR * AL_FUNCTION
|
|
ALDecompressorGetTypeString( hALDecompressor this_object );
|
|
|
|
#endif /* #if defined( __cplusplus ) ... else ...*/
|
|
|
|
|
|
#endif /* #ifndef _CMPENGN_H */
|
|
|