campo-sirio/cb/source/s4sort.h
alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

93 lines
3.6 KiB
C++
Executable File

/* s4sort.h (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
struct RELATE4St ;
typedef struct
{
char S4PTR *ptr ; /* Pointer to the starting memory */
unsigned pos ; /* The current position withing 'ptr' */
unsigned len ; /* The current data length pointed to by 'ptr' */
long disk ; /* Current Disk Position, Offset from start of 'spool' */
/* >= 'spoolBytes' means nothing is on disk. */
int spoolI ; /* The spool number of this spool */
} S4SPOOL ;
#ifdef S4CBPP
class S4CLASS SORT4
{
public:
#else
typedef struct
{
#endif
CODE4 S4PTR *codeBase ;
FILE4 file ;
/* char fileNameBuf[14] ;*/
FILE4SEQ_WRITE seqwrite ;
char S4PTR *seqwriteBuffer ;
S4SPOOL S4PTR *spoolPointer ;
unsigned int spoolsN ; /* The current # of "spools" */
unsigned int spoolsMax ; /* The # of "spools" memory is allocated for */
char S4PTR * S4PTR *pointers ;
unsigned int pointersI ; /* The next pointers to return using 'get'. */
unsigned int pointersUsed ; /* The number of pointers assigned so far. */
unsigned int pointersInit ; /* The number of pointers initialied so far. */
unsigned int pointersMax ; /* The number of pointers for which memory */
/* has been allocated. */
LIST4 pool ; /* A number of memory pools for sorting */
MEM4 S4PTR *poolMemory ;
unsigned int poolN ; /* The number of pools */
unsigned int poolEntries ; /* Number of record entries in each pool */
unsigned int sortLen ;
long spoolDiskLen ; /* The # of bytes in each disk spool */
unsigned spoolMemLen ; /* The # of bytes in each memory spool */
unsigned int infoOffset ; /* The spot to put the corresponding info. */
unsigned int infoLen ;
unsigned int totLen ; /* The total length of each pool entry. */
long isMemAvail ;
S4CMP_FUNCTION *cmp ;
#ifdef S4CBPP
} ;
#else
} SORT4 ;
#endif
/* The 'len' is passed to the compare function as its third parameter */
/* The compare function returns '(int) 1' iff 'v1>v2'. */
/* s4quick also assumes that there is a record number after the sort data */
#ifdef __cplusplus
extern "C" {
#endif
int s4quick( void S4PTR * S4PTR *, const int, S4CMP_FUNCTION *, const int ) ;
void s4deleteSpoolEntry( SORT4 S4PTR * ) ;
int s4flush( SORT4 S4PTR * ) ; /* Flushes current entries to disk */
int sort4getPtrPtr( SORT4 S4PTR *, char S4PTR * S4PTR * ) ;
void sort4initPointers( SORT4 S4PTR *, char S4PTR *, unsigned ) ;
long s4needed(SORT4 S4PTR *) ; /* Returns an estimate on the amount of memory needed */
int s4nextSpoolEntry(SORT4 S4PTR *) ;
S4EXPORT int S4FUNCTION sort4free( SORT4 S4PTR * ) ; /* Frees any allocated memory and uninitializes */
S4EXPORT int S4FUNCTION sort4get( SORT4 S4PTR *, long S4PTR *, void S4PTR * S4PTR *, void S4PTR * S4PTR * ) ;
S4EXPORT int S4FUNCTION sort4getInit( SORT4 S4PTR * ) ;
S4EXPORT int S4FUNCTION sort4getInitFree( SORT4 *, struct RELATE4St * ) ;
S4EXPORT int S4FUNCTION sort4getMemInit( SORT4 * ) ;
S4EXPORT int S4FUNCTION sort4init( SORT4 S4PTR *, CODE4 S4PTR *, const int, const int ) ;
S4EXPORT int S4FUNCTION sort4initAlloc( SORT4 S4PTR * ) ;
S4EXPORT int S4FUNCTION sort4initFree( SORT4 S4PTR *, CODE4 S4PTR *, const int, const int, struct RELATE4St * ) ;
S4EXPORT int S4FUNCTION sort4initSet( SORT4 S4PTR *, CODE4 S4PTR *, const int, const int ) ;
S4EXPORT int S4FUNCTION sort4put( SORT4 S4PTR *, const long, const void S4PTR *, const void S4PTR * ) ;
S4EXPORT int S4FUNCTION sort4spoolsInit( SORT4 S4PTR *, const int ) ;
#ifdef __cplusplus
}
#endif