714dd74636
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
261 lines
10 KiB
C++
Executable File
261 lines
10 KiB
C++
Executable File
/*
|
|
* GLENGH.H
|
|
*
|
|
* Header file for ArchiveLib 2.0
|
|
*
|
|
* Copyright (c) 1994-1996 Greenleaf Software, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This file contains the class declaration for ALGlCompressor
|
|
* and ALGlDecompressor. These are the two classes that together
|
|
* impelement the complete greenleaf compression engine.
|
|
*
|
|
* CLASS DEFINITIONS:
|
|
*
|
|
* ALGlCompressor
|
|
* ALGlDecompressor
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* July 8, 1994 1.0B : In most of my class definitions I create a prototype
|
|
* for a private/protected copy constructor and
|
|
* assignment operator, because I don't want the compiler
|
|
* to create default versions. I forgot to do it for
|
|
* this class, which didn't cause any trouble under
|
|
* MS-DOS. gcc under UNIX flagged the problem, which
|
|
* I fixed by adding the prototypes.
|
|
*
|
|
* August 10, 1994 1.0B : Added an inline function that will return the
|
|
* compression level. This is needed if you are
|
|
* going to do a nice listing of objects stored
|
|
* in an archive.
|
|
*
|
|
* February 14, 1996 2.0A : New release
|
|
*/
|
|
|
|
#ifndef _GRENENGN_H
|
|
#define _GRENENGN_H
|
|
|
|
#include "arclib.h"
|
|
|
|
#if defined( __cplusplus )
|
|
|
|
|
|
#include "engn.h"
|
|
|
|
/*
|
|
* class ALGlCompressor
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* ALGlCompressor is the Greenleaf proprietary compression
|
|
* engine. Compression engines have a simple API, so there aren't
|
|
* too many functions. This class has two data members that
|
|
* are initialized in the constructor. One of them, the compression level,
|
|
* has to be saved with the data in order for decompression to work
|
|
* properly. It is saved and read with the virtual functions
|
|
* ReadEngineData() and WriteEngineData(), using a single short
|
|
* in the archive directory.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* miCompressionLevel : This is the compression level that the
|
|
* compressor will attempt to use, selected
|
|
* from one of the five settings found in
|
|
* the enumerated type in ALDEFS.H. If the
|
|
* file is incompressible and the engine
|
|
* performs a straight binary copy this value
|
|
* changes to AL_GREENLEAF_COPY.
|
|
*
|
|
* miFailUncompressible : This data member is used to flag the
|
|
* action the compressor takes if a file
|
|
* turns out to be incompressible. If this
|
|
* member is set, the engine will stop compressing,
|
|
* seek back to the start of the file, and
|
|
* just copy the data. If this member is clear,
|
|
* we don't ever check to see if the file is
|
|
* compressing properly.
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALGlCompressor() : The constructor.
|
|
* ~ALGlCompressor() : The virtual destructor.
|
|
* operator new() : The memory allocation operator, which is
|
|
* only used when the library is in a DLL.
|
|
* WriteEngineData() : The virtual function that writes private
|
|
* configuration data. For this class, this
|
|
* function writes out a single short int
|
|
* containing the compression level.
|
|
* ReadEngineData() : The complement for the above function, used
|
|
* during extraction.
|
|
* Compress() : The routine that actually performs the
|
|
* compression.
|
|
* Clone() : If a compression engine is added to a
|
|
* toolkit, this function can be called to
|
|
* create a new compressor.
|
|
* CompressionLevel() : A member function that returns the compression
|
|
* level for the engine.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* February 14, 1996 2.0: New release
|
|
*/
|
|
|
|
class AL_CLASS_TYPE ALGlCompressor : public ALCompressor { /* Tag public class */
|
|
/*
|
|
* Declarations, friends, constructors, destructors
|
|
*/
|
|
public :
|
|
#if defined( AL_FLAT_MODEL )
|
|
AL_PROTO ALGlCompressor( short int compression_level = AL_GREENLEAF_LEVEL_4,
|
|
short int fail_uncompressible = 0 );
|
|
#else
|
|
AL_PROTO ALGlCompressor( short int compression_level = AL_GREENLEAF_LEVEL_2,
|
|
short int fail_uncompressible = 0 );
|
|
#endif
|
|
virtual AL_PROTO ~ALGlCompressor();
|
|
#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 ALGlCompressor( ALGlCompressor AL_DLL_FAR & );
|
|
ALGlCompressor AL_DLL_FAR & AL_PROTO operator=( ALGlCompressor AL_DLL_FAR & rhs );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
protected :
|
|
virtual int AL_PROTO WriteEngineData( ALStorage AL_DLL_FAR * archive );
|
|
virtual int AL_PROTO ReadEngineData( ALStorage AL_DLL_FAR * archive );
|
|
|
|
public :
|
|
virtual ALCompressor AL_DLL_FAR * AL_PROTO Clone( int engine_type ) const;
|
|
virtual int AL_PROTO Compress( ALStorage AL_DLL_FAR &input,
|
|
ALStorage AL_DLL_FAR &output );
|
|
short int AL_PROTO CompressionLevel();
|
|
/*
|
|
* Data members
|
|
*/
|
|
protected :
|
|
short int miCompressionLevel;
|
|
short int miFailUncompressible;
|
|
public :
|
|
AL_CLASS_TAG( _ALGlCompressorTag );
|
|
};
|
|
|
|
|
|
/*
|
|
* class ALGlDecompressor
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* ALGlDecompressor is the Greenleaf proprietary decompression
|
|
* engine. Decompression engines have a simple API, so there aren't
|
|
* too many functions. This class has a single data member (the
|
|
* compression level) that is initialized in the constructor. The
|
|
* compression level has to be the same as it was when in the compressor
|
|
* when the file was compressed.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* miCompressionLevel : This is the compression level that the
|
|
* decompressor will use, selected
|
|
* from one of the five settings found in
|
|
* the enumerated type in ALDEFS.H. This must
|
|
* match the compression level that was used
|
|
* by the ALGlCompressor engine when the
|
|
* object was first compressed.
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALGlDecompressor() : The constructor.
|
|
* ~ALGlDecompressor() : The virtual destructor.
|
|
* operator new() : The memory allocation operator, which is
|
|
* only used when the library is in a DLL.
|
|
* WriteEngineData() : The virtual function that writes private
|
|
* configuration data. For this class, this
|
|
* function writes out a single short int
|
|
* containing the compression level.
|
|
* ReadEngineData() : The complement for the above function, used
|
|
* during extraction.
|
|
* Decompress() : The routine that actually performs the
|
|
* decompression.
|
|
* Clone() : If a compression engine is added to a
|
|
* toolkit, this function can be called to
|
|
* create a new compressor.
|
|
* CompressionLevel() : A member function that returns the compression
|
|
* level for the engine.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
* February 14, 1996 2.0: New release
|
|
*/
|
|
|
|
class AL_CLASS_TYPE ALGlDecompressor : public ALDecompressor { /* Tag public class */
|
|
/*
|
|
* Declarations, friends, constructors, destructors
|
|
*/
|
|
public :
|
|
#if defined( AL_FLAT_MODEL ) || defined( AL_FLAT_MODEL )
|
|
AL_PROTO ALGlDecompressor( short int compression_level = AL_GREENLEAF_LEVEL_4 );
|
|
#else
|
|
AL_PROTO ALGlDecompressor( short int compression_level = AL_GREENLEAF_LEVEL_2 );
|
|
#endif
|
|
virtual AL_PROTO ~ALGlDecompressor();
|
|
#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 ALGlDecompressor( ALGlDecompressor AL_DLL_FAR & );
|
|
ALGlDecompressor AL_DLL_FAR & AL_PROTO operator=( ALGlDecompressor AL_DLL_FAR & rhs );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
protected :
|
|
virtual int AL_PROTO WriteEngineData( ALStorage AL_DLL_FAR * archive );
|
|
virtual int AL_PROTO ReadEngineData( ALStorage AL_DLL_FAR * archive );
|
|
|
|
public :
|
|
virtual ALDecompressor AL_DLL_FAR * AL_PROTO Clone( int engine_type ) const;
|
|
virtual int AL_PROTO Decompress( ALStorage AL_DLL_FAR &input,
|
|
ALStorage AL_DLL_FAR &output,
|
|
long compressed_length = -1L );
|
|
short int AL_PROTO CompressionLevel();
|
|
/*
|
|
* Data members
|
|
*/
|
|
public :
|
|
short int miCompressionLevel;
|
|
AL_CLASS_TAG( _ALGlDecompressorTag );
|
|
};
|
|
|
|
#include "glengn.inl"
|
|
|
|
#else /* #ifdef __cplusplus ... */
|
|
|
|
AL_LINKAGE short int AL_FUNCTION ALGlCompressorLevel( hALCompressor this_object );
|
|
AL_LINKAGE short int AL_FUNCTION ALGlDecompressorLevel( hALDecompressor this_object );
|
|
AL_LINKAGE hALCompressor AL_FUNCTION
|
|
newALGlCompressor( short int compression_level, short int fail_uncompressible );
|
|
AL_LINKAGE hALDecompressor AL_FUNCTION
|
|
newALGlDecompressor( short int compression_level );
|
|
|
|
#endif /* #ifdef __cplusplus ... #else ... */
|
|
|
|
#endif /* #ifdef _GRENENGN_H */
|