campo-sirio/al/cpp_all/toolkit.cpp
alex 714dd74636 Archive Library versione 2.00
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-09 16:09:54 +00:00

1844 lines
48 KiB
C++
Executable File

//
// TOOLKIT.CPP
//
// Source file for ArchiveLib 2.0
//
// Copyright (c) Greenleaf Software, Inc. 1994-1996
// All Rights Reserved
//
// CONTENTS
//
// ALToolKit::operator new()
// ALToolKit::ALToolKit()
// ALToolKit::ALToolKit( const ALToolKit& )
// ALToolKit::ALToolKit( const ALCompressor & )
// ALToolKit::ALToolKit( const ALDecompressor & )
// ALToolKit::ALToolKit( const ALStorage & )
// ALToolKit::~ALToolKit()
// deleteALToolKit()
// ALToolKit::operator+( const ALCompressor & )
// ALToolKit::operator+( const ALDecompressor & )
// ALToolKit::operator+( const ALStorage & )
// operator+( ALCompressor &, ALCompressor & )
// operator+( ALCompressor &, ALDecompressor & )
// operator+( ALCompressor &, ALStorage & )
// operator+( ALDecompressor &, ALCompressor & )
// operator+( ALDecompressor &, ALDecompressor & )
// operator+( ALDecompressor &, ALStorage & )
// operator+( ALStorage &, ALCompressor & )
// operator+( ALStorage &, ALDecompressor & )
// operator+( ALStorage &, ALStorage & )
// ALToolKit::CreateCompressor()
// ALToolKit::CreateDecompressor()
// ALToolKit::CreateStorageObject()
//
// DESCRIPTION
//
// A toolkit is simply a collection of compressors, decompressors,
// and storage objects. The exciting part of a toolkit is that
// I let you add any one of these objects to the kit at any time
// using operator+(). I also let you construct a toolkit
// using any of these objects.
//
// This file contains all the toolkit source code to keep all this
// working.
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
#include "arclib.h"
#if !defined( AL_IBM )
#pragma hdrstop
#endif
//
// NAME
//
// ALToolKit::operator new()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Memory allocator used when ArchiveLib resides in a 16 bit DLL.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// void * ALToolKit::operator new( size_t size )
//
// C SYNOPSIS
//
// None.
//
// VB SYNOPSIS
//
// None.
//
// DELPHI SYNOPSIS
//
// None.
//
// ARGUMENTS
//
// size : The number of bytes that the compiler has decided will be
// necessary to construct a new ALToolKit object.
//
// DESCRIPTION
//
// When using a DLL, it is easy to get into a dangerous situation when
// creating objects whose ctor and dtor are both in the DLL. The problem
// arises because when you create an object using new, the memory for
// the object will be allocated from the EXE. However, when you destroy
// the object using delete, the memory is freed inside the DLL. Since
// the DLL doesn't really own that memory, bad things can happen.
//
// But, you say, won't the space just go back to the Windows heap regardless
// of who tries to free it? Maybe, but maybe not. If the DLL is using
// a subsegment allocation scheme, it might do some sort of local free
// before returning the space to the windows heap. That is the point where
// you could conceivably cook your heap.
//
// By providing our own version of operator new inside this class, we
// ensure that all memory allocation for the class will be done from
// inside the DLL, not the EXE calling the DLL.
//
// RETURNS
//
// A pointer to some memory that should have been pulled out of the
// heap for the DLL.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
#if defined( AL_BUILDING_DLL )
void AL_DLL_FAR * AL_PROTO
ALToolKit::operator new( size_t size ) /* Tag protected function */
{
return ::new char[ size ];
}
#endif
//
// NAME
//
// ALToolKit::ALToolKit()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// The default toolkit constructor.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::ALToolKit();
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// None.
//
// DESCRIPTION
//
// An ALToolKit object contains three arrays: a list of compressors,
// decompressors, and storage objects. When the default constructor is
// invoked, the toolkit starts off completely empty, so all of the
// arrays are set to 0, which is a special case, meaning the list is empty.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::ALToolKit() /* Tag public function */
{
mpCompressors = 0;
mpDecompressors = 0;
mpStorages = 0;
}
//
// NAME
//
// ALToolKit::ALToolKit(const ALToolKit &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// The ALToolKit copy constructor.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::ALToolKit( const ALToolKit &rhs );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// rhs : A reference to another toolkit. This toolkit will be
// copied during the creation of the new toolkit.
//
// DESCRIPTION
//
// In order to provide easy manipulation of ALToolKit objects, a copy
// constructor is a necessity. The copy constructor requires that
// we create a new toolkit that is just like the rhs argument.
//
// The easiest way to make these toolkits the same would be to have
// them both point to the same lists of compressors, decompressors,
// and storage objects. But having two containers that are free to jack
// with the list at the same time would be a real monster.
//
// So, isntead, the copy constructor creates new lists. The
// elements in the list are populated using the Clone() functions,
// which should produce identical copies of the storage objects,
// compressors, and decompressors. When each item in the rsh has been
// cloned, we have a new ALToolKit that isn't a binary copy of the
// rhs, but will behave in an identical fashion.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::ALToolKit( const ALToolKit AL_DLL_FAR &rhs ) /* Tag public function */
{
int i;
//
// If the rhs has a list of compressors, clone a copy. Else set the
// list pointer to 0, indicating no compressors on hand.
//
if ( rhs.mpCompressors ) {
for ( i = 0 ; rhs.mpCompressors[ i ] ; i++ )
;
mpCompressors = new ALCompressor AL_DLL_FAR *[ i + 1 ];
if ( mpCompressors ) {
for ( i = 0 ; rhs.mpCompressors[ i ] ; i++ )
mpCompressors[ i ] = rhs.mpCompressors[ i ]->Clone( AL_COMPRESSION_DEFAULT );
mpCompressors[ i ] = 0;
}
} else
mpCompressors = 0;
//
// If the rhs has a list of decompressors, clone a copy. Else set the
// list pointer to 0, indicating no decompressors on hand.
//
if ( rhs.mpDecompressors ) {
for ( i = 0 ; rhs.mpDecompressors[ i ] ; i++ )
;
mpDecompressors = new ALDecompressor AL_DLL_FAR *[ i + 1 ];
if ( mpDecompressors ) {
for ( i = 0 ; rhs.mpDecompressors[ i ] ; i++ )
mpDecompressors[ i ] = rhs.mpDecompressors[ i ]->Clone( AL_COMPRESSION_DEFAULT );
mpDecompressors[ i ] = 0;
}
} else
mpDecompressors = 0;
//
// If the rhs has a list of storage objects, clone a copy. Else set the
// list pointer to 0, indicating no storage objects on hand.
//
if ( rhs.mpStorages ) {
for ( i = 0 ; rhs.mpStorages[ i ] ; i++ )
;
mpStorages = new ALStorage AL_DLL_FAR *[ i + 1 ];
if ( mpStorages ) {
for ( i = 0 ; rhs.mpStorages[ i ] ; i++ )
mpStorages[ i ] = rhs.mpStorages[ i ]->Clone( "", AL_STORAGE_DEFAULT );
mpStorages[ i ] = 0;
}
} else
mpStorages = 0;
}
//
// NAME
//
// ALToolKit::ALToolKit(const ALCompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Construct a new ALToolKit that contains a copy of the compressor argument.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::ALToolKit( const ALCompressor &c );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// c : A reference to a compressors. When the toolkit is constructed,
// it will contain a clone of this compressor.
//
// DESCRIPTION
//
// ALToolKit contains lists of compressors, decompressors, and
// storage objects. In order to make toolkit manipulation as simple
// as possible, constructors are provided that accept each of these
// types of objects as arguments. In this case, the argument is a
// reference to a compressor.
//
// The three lists are initialized in the constructor. The
// decompressor and storage object lists are initialized to be empty,
// and the compressor list has a single clone of the compressor
// specified as the rhs argument.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::ALToolKit( const ALCompressor AL_DLL_FAR &c ) /* Tag public function */
{
mpCompressors = new ALCompressor AL_DLL_FAR *[ 2 ];
if ( mpCompressors ) {
mpCompressors[ 0 ] = c.Clone( AL_COMPRESSION_DEFAULT );
mpCompressors[ 1 ] = 0;
}
mpDecompressors = 0;
mpStorages = 0;
}
//
// NAME
//
// ALToolKit::ALToolKit(const ALDecompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Construct an ALToolKit that contains a copy of the decompressor argument.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::ALToolKit( const ALDecompressor &d );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// d : A reference to a decompressor. When the toolkit is constructed,
// it will contain a clone of this decompressor.
//
// DESCRIPTION
//
// ALToolKit contains lists of compressors, decompressors, and
// storage objects. In order to make toolkit manipulation as simple
// as possible, constructors are provided that accept each of these
// types of objects as arguments. In this case, the argument is a
// reference to a decompressor.
//
// The three lists are initialized in the constructor. The
// compressor and storage object lists are initialized to be empty,
// and the decompressor list has a single clone of the decompressor
// specified as the rhs argument.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::ALToolKit( const ALDecompressor AL_DLL_FAR &d ) /* Tag public function */
{
mpCompressors = 0;
mpDecompressors = new ALDecompressor AL_DLL_FAR *[ 2 ];
if ( mpDecompressors ) {
mpDecompressors[ 0 ] = d.Clone( AL_COMPRESSION_DEFAULT );
mpDecompressors[ 1 ] = 0;
}
mpStorages = 0;
}
//
// NAME
//
// ALToolKit::ALToolKit(const ALStorage &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Construct an ALToolKit that contains a copy of the storage object argument.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::ALToolKit( const ALStorage &s );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// s : A reference to a storage object. When the toolkit is constructed,
// it will contain a clone of this object.
//
// DESCRIPTION
//
// ALToolKit contains lists of compressors, decompressors, and
// storage objects. In order to make toolkit manipulation as simple
// as possible, constructors are provided that accept each of these
// types of objects as arguments. In this case, the argument is a
// reference to a storage object.
//
// The three lists are initialized in the constructor. The
// compressor and decompressor object lists are initialized to be empty,
// and the storage object list has a single clone of the storage object
// specified as the rhs argument.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::ALToolKit( const ALStorage AL_DLL_FAR &s ) /* Tag public function */
{
mpCompressors = 0;
mpDecompressors = 0;
mpStorages = new ALStorage AL_DLL_FAR *[ 2 ];
if ( mpStorages ) {
mpStorages[ 0 ] = s.Clone( "", AL_STORAGE_DEFAULT );
mpStorages[ 1 ] = 0;
}
}
//
// NAME
//
// ALToolKit::~ALToolKit()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// The ALToolKit destructor.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit::~ALToolKit();
//
// C SYNOPSIS
//
// #include "arclib.h"
//
// void deleteALToolKit( hALToolKit this_object );
//
// VB SYNOPSIS
//
// Declare Sub deleteALToolKit Lib "AL20LW" (ByVal this_object&)
//
// DELPHI SYNOPSIS
//
// procedure deleteALToolKit( this_object : hALArchive );
//
// ARGUMENTS
//
// this_object : A reference or pointer to the ALToolKit object that
// is going to be destroyed. Note that the C++ member
// function doesn't have this_object as an argument, because
// it has implicit access to it via 'this'.
//
// DESCRIPTION
//
// To destroy a toolkit, you need to work through each of the three lists,
// destroying every object in the list. After destroying all the objects
// in the list, you then destroy the list itself. Note that the list may
// be empty when the destructor is called, in which case it doesn't need
// to be deleted. This is flagged by it having a 0 value.
//
// This is the only member function of ALToolKit that has a C/VB/Delphi
// translation function. These languages will get working pointers to
// constructed toolkits via the toolkit creation functions. These toolkits
// must be deleted in order to prevent memory leaks, so we have to have
// a translation function.
//
// RETURNS
//
// Nothing.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_PROTO
ALToolKit::~ALToolKit() /* Tag public function */
{
int i;
if ( mpCompressors ) {
for ( i = 0 ; mpCompressors[ i ] ; i++ )
delete mpCompressors[ i ];
delete[] mpCompressors;
}
if ( mpDecompressors ) {
for ( i = 0 ; mpDecompressors[ i ] ; i++ )
delete mpDecompressors[ i ];
delete[] mpDecompressors;
}
if ( mpStorages ) {
for ( i = 0 ; mpStorages[ i ] ; i++ )
delete mpStorages[ i ];
delete[] mpStorages;
}
}
#if !defined( AL_NO_C )
extern "C" AL_LINKAGE void AL_FUNCTION
deleteALToolKit( hALToolKit this_object ) /* Tag public function */
{
AL_ASSERT_OBJECT( this_object, ALToolKit, "deleteALToolKit()" );
delete (ALToolKit *) this_object;
}
#endif
//
// NAME
//
// ALToolKit::operator+( const ALCompressor &c )
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Add a compressor object to a toolkit.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit &ALToolKit::operator+( const ALCompressor &c );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// c : A reference to an ALCompressor object. A copy of this object
// will be added to the toolkit.
//
// DESCRIPTION
//
// This is one of three member operators that allow you to add a new
// object to an existing toolkit. The function just has to either create
// a new list for the object, or expand the existing object by one entry.
// The object is then copied into the list using the Clone() function.
//
// RETURNS
//
// A reference to the toolkit. This is done in standard C++ style to
// allow cascaded operations.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALToolKit AL_DLL_FAR & AL_PROTO
ALToolKit::operator+( const ALCompressor AL_DLL_FAR &c ) /* Tag public function */
{
if ( mpCompressors ) {
int i;
for ( i = 0 ; mpCompressors[ i ] ; i++ )
;
ALCompressor AL_DLL_FAR **p = new ALCompressor AL_DLL_FAR *[ i + 2 ];
if ( p ) {
for ( int j = 0 ; j < i ; j++ )
p[ j ] = mpCompressors[ j ];
p[ i ] = c.Clone( AL_COMPRESSION_DEFAULT );
p[ i + 1 ] = 0;
delete[] mpCompressors;
mpCompressors = p;
}
} else {
mpCompressors = new ALCompressor AL_DLL_FAR *[ 2 ];
if ( mpCompressors ) {
mpCompressors[ 0 ] = c.Clone( AL_COMPRESSION_DEFAULT );
mpCompressors[ 1 ] = 0;
}
}
return *this;
}
//
// NAME
//
// ALToolKit::operator+( const ALDecompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Add a decompressor object to a toolkit.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit &ALToolKit::operator+( const ALDecompressor &d );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// d : A reference to an ALDecompressor object. A copy of this object
// will be added to the toolkit.
//
// DESCRIPTION
//
// This is one of three member operators that allow you to add a new
// object to an existing toolkit. The function just has to either create
// a new list for the object, or expand the existing list by one entry.
// The object is then copied into the list using the Clone() function.
//
// RETURNS
//
// A reference to the toolkit. This is done in standard C++ style to
// allow cascaded operations.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALToolKit AL_DLL_FAR & AL_PROTO
ALToolKit::operator+( const ALDecompressor AL_DLL_FAR &d ) /* Tag public function */
{
if ( mpDecompressors ) {
int i;
for ( i = 0 ; mpDecompressors[ i ] ; i++ )
;
ALDecompressor AL_DLL_FAR **p = new ALDecompressor AL_DLL_FAR *[ i + 2 ];
if ( p ) {
for ( int j = 0 ; j < i ; j++ )
p[ j ] = mpDecompressors[ j ];
p[ i ] = d.Clone( AL_COMPRESSION_DEFAULT );
p[ i + 1 ] = 0;
delete[] mpDecompressors;
mpDecompressors = p;
}
} else {
mpDecompressors = new ALDecompressor AL_DLL_FAR *[ 2 ];
if ( mpDecompressors ) {
mpDecompressors[ 0 ] = d.Clone( AL_COMPRESSION_DEFAULT );
mpDecompressors[ 1 ] = 0;
}
}
return *this;
}
//
// NAME
//
// ALToolKit::operator+( const ALStorage &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Add a storage object to a toolkit.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit &ALToolKit::operator+( const ALStorage &d );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// s : A reference to an ALStorage object. A copy of this object
// will be added to the toolkit.
//
// DESCRIPTION
//
// This is one of three member operators that allow you to add a new
// object to an existing toolkit. The function just has to either create
// a new list for the object, or expand the existing list by one entry.
// The object is then copied into the list using the Clone() function.
//
// RETURNS
//
// A reference to the toolkit. This is done in standard C++ style to
// allow cascaded operations.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALToolKit AL_DLL_FAR & AL_PROTO
ALToolKit::operator+( const ALStorage AL_DLL_FAR &s ) /* Tag public function */
{
if ( mpStorages ) {
int i;
for ( i = 0 ; mpStorages[ i ] ; i++ )
;
ALStorage AL_DLL_FAR **p = new ALStorage AL_DLL_FAR *[ i + 2 ];
if ( p ) {
for ( int j = 0 ; j < i ; j++ )
p[ j ] = mpStorages[ j ];
p[ i ] = s.Clone( "", AL_STORAGE_DEFAULT );
p[ i + 1 ] = 0;
delete[] mpStorages;
mpStorages = p;
}
} else {
mpStorages = new ALStorage AL_DLL_FAR *[ 2 ];
if ( mpStorages ) {
mpStorages[ 0 ] = s.Clone( "", AL_STORAGE_DEFAULT );
mpStorages[ 1 ] = 0;
}
}
return *this;
}
//
// NAME
//
// operator+( const ALCompressor &,const ALCompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with two ALCompressor objects.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALCompressor &c1,
// const ALCompressor &c2 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// c1 : A reference to an ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// c2 : A reference to a second ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALCompressor AL_DLL_FAR & c1, /* Tag public function */
const ALCompressor AL_DLL_FAR & c2 )
{
ALToolKit a( c1 );
return a + c2;
}
//
// NAME
//
// operator+( const ALCompressor &,const ALDecompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with and ALCompressor and ALDecompressor object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALCompressor &c1,
// const ALDecompressor &d1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// c1 : A reference to an ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// d1 : A reference to an ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALCompressor AL_DLL_FAR & c1, /* Tag public function */
const ALDecompressor AL_DLL_FAR & d1 )
{
ALToolKit a( c1 );
return a + d1;
}
//
// NAME
//
// operator+( const ALCompressor &,const ALStorage &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with and ALCompressor and ALStorage object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALCompressor &c1,
// const ALStorage &s1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// c1 : A reference to an ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// s1 : A reference to an ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALCompressor AL_DLL_FAR & c1, /* Tag public function */
const ALStorage AL_DLL_FAR & s1 )
{
ALToolKit a( c1 );
return a + s1;
}
//
// NAME
//
// operator+( const ALDecompressor &,const ALCompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with and ALDecompressor and ALCompressor object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALDecompressor &d1,
// const ALCompressor &c1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// d1 : A reference to an ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// c1 : A reference to an ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALDecompressor AL_DLL_FAR & d1, /* Tag public function */
const ALCompressor AL_DLL_FAR & c1 )
{
ALToolKit a( d1 );
return a + c1;
}
//
// NAME
//
// operator+( const ALDecompressor &,const ALDecompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with two ALDecompressor objects.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALDecompressor &d1,
// const ALDecompressor &d2 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// d1 : A reference to an ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// d2 : A reference to a second ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALDecompressor AL_DLL_FAR & d1, /* Tag public function */
const ALDecompressor AL_DLL_FAR & d2 )
{
ALToolKit a( d1 );
return a + d2;
}
//
// NAME
//
// operator+( const ALDecompressor &,const ALStorage &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with an ALDecompressor and an ALStorage object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALDecompressor &d1,
// const ALStorage &s1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// d1 : A reference to an ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// s1 : A reference to an ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALDecompressor AL_DLL_FAR & d1, /* Tag public function */
const ALStorage AL_DLL_FAR & s1 )
{
ALToolKit a( d1 );
return a + s1;
}
//
// NAME
//
// operator+( const ALStorage &,const ALCompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with an ALStorage and an ALCompressor object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALStorage &s1,
// const ALCompressor &c1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// s1 : A reference to an ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// c1 : A reference to an ALCompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALStorage AL_DLL_FAR & s1, /* Tag public function */
const ALCompressor AL_DLL_FAR & c1 )
{
ALToolKit a( s1 );
return a + c1;
}
//
// NAME
//
// operator+( const ALStorage &,const ALDecompressor &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with an ALStorage and an ALDecompressor object.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALStorage &s1,
// const ALDecompressor &d1 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// s1 : A reference to an ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// d1 : A reference to an ALDecompressor object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALStorage AL_DLL_FAR & s1, /* Tag public function */
const ALDecompressor AL_DLL_FAR & d1 )
{
ALToolKit a( s1 );
return a + d1;
}
//
// NAME
//
// operator+( const ALStorage &,const ALStorage &)
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create a toolkit with two ALStorage objects.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALToolKit operator+( const ALStorage &s1,
// const ALStorage &s2 );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// s1 : A reference to an ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// s2 : A reference to a second ALStorage object. A copy of this
// object will be added to the resulting toolkit.
//
// DESCRIPTION
//
// This is one of 9 global operators that overload the '+' symbol for
// ALCompressor, ALDecompressor, and ALStorage objects. The operator
// creates an ALToolKit that is initialized with clones of the two
// input objects. These operators are provided to make it more convenient
// to create ALToolKit objects, using syntax like this:
//
// ALToolKit tk = ALFile() + ALCopyCompressor() + ALHugeMemory().
//
// RETURNS
//
// A newly created toolkit. Since the toolkit has a copy constructor
// defined, we can get away with this, as opposed to returning a pointer
// to a newly created toolkit object. This is a lot nicer.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// November 13, 1995 2.00A : First release.
//
AL_LINKAGE ALToolKit AL_FUNCTION
operator+( const ALStorage AL_DLL_FAR & s1, /* Tag public function */
const ALStorage AL_DLL_FAR & s2 )
{
ALToolKit a( s1 );
return a + s2;
}
//
// NAME
//
// ALToolKit::CreateCompressor()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create an ALCompressor object based on a given type.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALCompressor * ALToolKit::CreateCompressor( int engine_type );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// int engine_type : An integer that describes the desirede engine type.
// This is normally either an integer that was stored
// in an archive along with a compressed object, or
// the AL_COMPRESSION_DEFAULT that is used to ask for
// the first available engine.
//
// DESCRIPTION
//
// This function and its two siblings constitute the whole reason for the
// esistence of a toolkit. When inserting objects int an entry list, this
// routine is called to build the appropriate engine. The engine that
// actually gets selected will depend on which toolkit has been passed
// in the ALEntryList constructor. This means that that archiving and
// entry list functions can operate without any knowledge about specific
// compression engines, which means they won't link in any engines that
// aren't included in your toolkit.
//
// This function works by repeatedly trying to clone each of the engines
// in the compression engine list. The Clone() function is called with
// the engine_type argument. If the compression engine feels it can
// construct an engine that matches that type, it will return a cloned
// copy. If not, it returns a 0.
//
// As soon as one of the Clone() calls succeeds, this function will pass
// back a copy of the created engine. Otherwise it will keep trying until
// it runs out of engines to clone. When it finally fails, it returns
// a 0.
//
// RETURNS
//
// Either a pointer to a newly created compression engine, or a 0 if no
// engine could be created for the given type.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALCompressor AL_DLL_FAR * AL_PROTO
ALToolKit::CreateCompressor( int engine_type ) /* Tag public function */
{
if ( !mpCompressors )
return 0;
for ( int i = 0 ; ; ) {
ALCompressor *compressor;
if ( mpCompressors[ i ] ) {
compressor = mpCompressors[ i++ ]->Clone( engine_type );
if ( compressor )
return compressor;
} else
break;
}
return 0;
}
//
// NAME
//
// ALToolKit::CreateDecompressor()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create an ALDecompressor object based on a given engine type.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALDecompressor * ALToolKit::CreateDecompressor( int engine_type );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// int engine_type : An integer that describes the desired engine type.
// This is normally either an integer that was stored
// in an archive along with a compressed object, or
// the AL_COMPRESSION_DEFAULT that is used to ask for
// the first available engine.
//
// DESCRIPTION
//
// This function and its two siblings constitute the whole reason for the
// esistence of a toolkit. When extracting objects from an archive, this
// routine is called to build the appropriate engine. The engine that
// actually gets built will depend on which toolkit has been passed
// in the ALEntryList constructor. This means that that archiving and
// entry list functions can operate without any knowledge about specific
// de/compression engines, which means they won't link in any engines that
// aren't included in your toolkit.
//
// This function works by repeatedly trying to clone each of the engines
// in the decompression engine list. The Clone() function is called with
// the engine_type argument. If the decompression engine feels it can
// construct a copy of itself that matches that type, it will return a cloned
// decompression engine. If not, it returns a 0.
//
// As soon as one of the Clone() calls succeeds, this function will pass
// back a copy of the created engine. Otherwise it will keep trying until
// it runs out of engines to clone. When it finally fails, it returns
// a 0.
//
// RETURNS
//
// Either a pointer to a newly created decompression engine, or a 0 if no
// engine could be created for the given type.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALDecompressor AL_DLL_FAR * AL_PROTO
ALToolKit::CreateDecompressor( int engine_type ) /* Tag public function */
{
if ( !mpDecompressors )
return 0;
for ( int i = 0 ; ; ) {
ALDecompressor *decompressor;
if ( mpDecompressors[ i ] ) {
decompressor = mpDecompressors[ i++ ]->Clone( engine_type );
if ( decompressor )
return decompressor;
} else
break;
}
return 0;
}
//
// NAME
//
// ALToolKit::CreateStorageObject()
//
// PLATFORMS/ENVIRONMENTS
//
// Console Windows PM
// C++
//
// SHORT DESCRIPTION
//
// Create an ALStorage object based on a given object type.
//
// C++ SYNOPSIS
//
// #include "arclib.h"
//
// ALStorage * ALToolKit::CreateStorageObject( int object_type );
//
// C SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// VB SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// DELPHI SYNOPSIS
//
// None, ALToolkit operations aren't available in C/VB/Delphi.
//
// ARGUMENTS
//
// int object_type : An integer that describes the desired object type.
// This is normally either an integer that was stored
// in an archive along with a compressed object, or
// the AL_STORAGE_DEFAULT that is used to ask for
// the first available storage object.
//
// DESCRIPTION
//
// This function and its two siblings constitute the whole reason for the
// esistence of a toolkit. When extracting objects from an archvie,
// this routine is called to build the empty objects. The object that
// actually gets built will depend on which toolkit has been passed
// in the ALEntryList constructor. This means that that archiving and
// entry list functions can operate without any knowledge about specific
// ALStorage objec types, which means they won't link in any types that
// aren't included in your toolkit.
//
// This function works by repeatedly trying to clone each of the objects
// in the storage object list. The Clone() function is called with
// the object_type argument. If the storage object feels it can
// construct a copy of itself that matches that type, it will return a cloned
// storage object. If not, it returns a 0.
//
// As soon as one of the Clone() calls succeeds, this function will pass
// back a copy of the storage object. Otherwise it will keep trying until
// it runs out of objects to clone. When it finally fails, it returns
// a 0.
//
// RETURNS
//
// Either a pointer to a newly created storage object, or a 0 if no
// object could be created for the given type.
//
// EXAMPLE
//
// SEE ALSO
//
// REVISION HISTORY
//
// February 14, 1996 2.0A : New release.
//
ALStorage AL_DLL_FAR * AL_PROTO
ALToolKit::CreateStorageObject( const char AL_DLL_FAR *name, /* Tag public function */
int object_type )
{
if ( !mpStorages )
return 0;
for ( int i = 0 ; ; ) {
ALStorage *storage;
if ( mpStorages[ i ] ) {
storage = mpStorages[ i++ ]->Clone( name, object_type );
if ( storage )
return storage;
} else
break;
}
return 0;
}