Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//============== DAE: OS/2 Database Access Engine ===================
//============== SCB: Sort Control Block ===================
#ifndef FCB_INCLUDED
#error scb.h requires fcb.h
#endif /* FCB_INCLUDED */
#ifdef SCB_INCLUDED
#error scb.h already included
#endif /* SCB_INCLUDED */
#define SCB_INCLUDED
typedef ULONG RID, *PRID;
typedef struct { PN pn; UINT cbfRun; } RUN, *PRUN;
/* choose crunMost so that crunMost % crunMergeMost = crunMergeMost - 1
/**/
#define crunMergeMost 16 // max number of runs to be merged
#define crunMost 31 // size of run directory
#define fSCBInsert (1<<0)
#define fSCBIndex (1<<1)
#define fSCBUnique (1<<2)
#define SCBSetInsert( pscb ) ((pscb)->fFlags |= fSCBInsert )
#define SCBResetInsert( pscb ) ((pscb)->fFlags &= ~fSCBInsert )
#define FSCBInsert( pscb ) ((pscb)->fFlags & fSCBInsert )
#define SCBSetIndex( pscb ) ((pscb)->fFlags |= fSCBIndex )
#define SCBResetIndex( pscb ) ((pscb)->fFlags &= ~fSCBIndex )
#define FSCBIndex( pscb ) ((pscb)->fFlags & fSCBIndex )
#define SCBSetUnique( pscb ) ((pscb)->fFlags |= fSCBUnique )
#define SCBResetUnique( pscb ) ((pscb)->fFlags &= ~fSCBUnique )
#define FSCBUnique( pscb ) ((pscb)->fFlags & fSCBUnique )
struct _scb { struct _fcb fcb; // MUST BE FIRST FIELD IN STRUCTURE
JET_GRBIT grbit; // sort grbit
INT fFlags; // sort flags
// in-memory related
LONG cbSort; // size of sort buffer
#ifdef WIN16
HANDLE hrgbSort; // handle for sort buffer
#endif /* WIN16 */
BYTE *rgbSort; // sort buffer
BYTE *pbEnd; // end of last inserted record
BYTE **rgpb; // beginning of array of pointers
BYTE **ppbMax; // end of array of pointers
LONG wRecords; // count of records in sort buffer
// disk related
BYTE *rgpbMerge[crunMost]; struct _bf *rgpbf[crunMergeMost]; struct _bf *pbfOut; // output buffer
BYTE *pbOut; // current pos in output buffer
BYTE *pbMax; // end of output buffer (could be computed)
RUN rgrun[crunMost]; // run directory
INT crun; INT bf; // input buffers
INT cpbMerge; // merge tree
#ifdef DEBUG
LONG cbfPin; LONG lInput; LONG lOutput; #endif
};
#ifdef DEBUG
#define SCBPin( pscb ) ( (pscb)->cbfPin++ )
#define SCBUnpin( pscb ) { Assert( (pscb)->cbfPin > 0 ); (pscb)->cbfPin--; }
#else
#define SCBPin( pscb )
#define SCBUnpin( pscb )
#endif
#define PscbMEMAlloc() (SCB*)PbMEMAlloc(iresSCB)
#ifdef DEBUG /* Debug check for illegal use of freed scb */
#define MEMReleasePscb(pscb) { MEMRelease(iresSCB, (BYTE*)(pscb)); pscb = pscbNil; }
#else
#define MEMReleasePscb(pscb) { MEMRelease(iresSCB, (BYTE*)(pscb)); }
#endif
|