20#ifdef XB_INDEX_SUPPORT
33struct XBDLLEXPORT xbIxNode {
120class XBDLLEXPORT xbIx :
public xbFile {
125 virtual xbInt16 CheckTagIntegrity(
void *vpTag, xbInt16 iOpt ) = 0;
126 virtual xbInt16 Close();
127 virtual xbInt16 CreateTag(
const xbString &sName,
const xbString &sKey,
const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay,
void **vpTag ) = 0;
128 virtual xbInt16 FindKey(
void *vpTag,
const xbString &sKey, xbInt16 iRetrieveSw );
129 virtual xbInt16 FindKey(
void *vpTag,
const char * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
130 virtual xbInt16 FindKey(
void *vpTag,
const xbBcd &bcd, xbInt16 iRetrieveSw );
131 virtual xbInt16 FindKey(
void *vpTag,
const xbDate &dtKey, xbInt16 iRetrieveSw );
132 virtual xbInt16 FindKey(
void *vpTag,
xbDouble dKey, xbInt16 iRetrieveSw );
133 virtual xbInt16 FindKey(
void *vpTag,
const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;
134 virtual void *GetCurTag()
const;
135 virtual xbDbf *GetDbf()
const;
137 virtual xbString &GetKeyExpression(
const void *vpTag )
const = 0;
138 virtual xbString &GetKeyFilter(
const void *vpTag )
const = 0;
139 virtual char GetKeyType(
const void *vpTag )
const = 0;
140 virtual xbBool GetLocked()
const;
142 virtual xbInt16 GetFirstKey(
void *vpTag, xbInt16 iRetrieveSw ) = 0;
143 virtual xbInt16 GetFirstKey(
void *vpTag );
144 virtual xbInt16 GetFirstKey();
146 virtual xbInt16 GetLastKey(
void *vpTag, xbInt16 lRetrieveSw ) = 0;
147 virtual xbInt16 GetLastKey(
void *vpTag );
148 virtual xbInt16 GetLastKey();
150 virtual xbInt16 GetNextKey(
void *vpTag, xbInt16 iRetrieveSw ) = 0;
151 virtual xbInt16 GetNextKey(
void *vpTag );
152 virtual xbInt16 GetNextKey();
154 virtual xbInt16 GetPrevKey(
void *vpTag, xbInt16 iRetrieveSw ) = 0;
155 virtual xbInt16 GetPrevKey(
void *vpTag );
156 virtual xbInt16 GetPrevKey();
158 virtual void *GetTag( xbInt16 iTagNo )
const = 0;
159 virtual void *GetTag( xbString &sTagName )
const = 0;
160 virtual xbInt16 GetTagCount()
const = 0;
162 virtual xbString &GetTagName(
void *vpTag )
const = 0;
163 virtual const char * GetTagName(
void *vpTag, xbInt16 iOpt )
const = 0;
164 virtual void GetTagName(
void *vpTag, xbString &sTagName ) {};
166 virtual xbBool GetUnique(
void *vpTag )
const = 0;
167 virtual xbBool GetSortOrder(
void *vpTag )
const = 0;
169 virtual xbInt16 Open(
const xbString &sFileName );
170 virtual xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;
171 virtual xbInt16 SetCurTag( xbString &sTagName ) = 0;
172 virtual void SetCurTag(
void * vpCurTag );
173 virtual void SetLocked(
xbBool bLocked );
175 virtual void TestStub(
char *s,
void *vpTag ) {};
179 virtual xbInt16 Reindex(
void **vpTag ) = 0;
182 #ifdef XB_DEBUG_SUPPORT
183 virtual xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) {
return XB_NO_ERROR; }
184 virtual xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;
185 virtual xbInt16 DumpIxForTag(
void *vpTag, xbInt16 iOutputOpt ) = 0;
186 virtual void DumpIxNodeChain(
void *vpTag, xbInt16 iOutputOpt )
const = 0;
187 virtual xbInt16 DumpNode(
void * vpTag, xbIxNode * pNode, xbInt16 iOption )
const;
188 virtual xbInt16 DumpTagBlocks( xbInt16 iOpt = 1,
void *vpTag = NULL ) = 0;
195 virtual xbInt16 AddKey(
void *vpTag, xbUInt32 ulRecNo ) = 0;
196 virtual xbInt16 AddKeys( xbUInt32 ulRecNo );
197 virtual xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
198 virtual xbInt16 BSearchBlock(
char cKeyType, xbIxNode *npNode, xbInt32 lKeyLen,
const void *vpKey, xbInt32 lSearchKeyLen, xbInt16 &iCompRc,
xbBool bDescending =
xbFalse )
const;
199 virtual xbInt16 CheckForDupKeys();
200 virtual xbInt16 CheckForDupKey(
void *vpTag ) = 0;
201 virtual xbInt16 CompareKey(
char cKeyType,
const void *v1,
const void *v2,
size_t lKeyLen )
const;
202 virtual xbInt16 CreateKeys( xbInt16 iOpt );
203 virtual xbInt16 CreateKey(
void * vpTag, xbInt16 iOpt ) = 0;
204 virtual xbInt16 DeleteFromNode(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;
205 virtual xbInt16 DeleteKeys();
206 virtual xbInt16 DeleteKey(
void *vpTag ) = 0;
207 virtual xbInt16 DeleteTag(
void *vpTag ) = 0;
209 virtual xbInt16 FindKeyForCurRec(
void *vpTag ) = 0;
210 virtual xbIxNode *FreeNodeChain( xbIxNode *np );
211 virtual xbInt16 GetBlock(
void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );
212 virtual xbInt32 GetKeyCount( xbIxNode *npNode )
const;
213 virtual char *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen )
const;
214 virtual xbInt16 GetKeySts(
void *vpTag )
const = 0;
215 virtual xbInt16 GetLastKey( xbUInt32 ulNodeNo,
void *vpTag, xbInt16 lRetrieveSw ) = 0;
216 virtual xbInt16 InsertNodeL(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo,
char * cpKeyBuf, xbUInt32 uiPtr ) = 0;
217 virtual xbInt16 InsertNodeI(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
218 virtual xbInt16 KeyExists(
void * ) = 0;
219 virtual void NodeFree( xbIxNode * ixNode );
220 virtual xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;
222 virtual void SetDbf(
xbDbf *dbf );
223 virtual xbInt16 SplitNodeL(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo,
char *cpKeyBuf, xbUInt32 uiPtr ) = 0;
224 virtual xbInt16 SplitNodeI(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
225 virtual xbInt16 UpdateTagKey(
char cAction,
void *vpTag, xbUInt32 ulRecNo = 0 ) = 0;
226 virtual xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;
233 virtual void AppendNodeChain(
void *vpTag, xbIxNode *npNode ) = 0;
234 virtual xbInt16 GetKeyPtr(
void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr )
const = 0;
235 virtual xbBool IsLeaf(
void *vpTag, xbIxNode *npNode )
const = 0;
243#define XB_NDX_BLOCK_SIZE 512
247struct XBDLLEXPORT xbNdxTag {
250 xbUInt32 ulRootBlock;
251 xbUInt32 ulTotalBlocks;
254 xbInt16 iKeysPerBlock;
259 xbString sKeyExpression;
264 xbIxNode *npNodeChain;
302class XBDLLEXPORT xbIxNdx :
public xbIx {
304 xbIxNdx(
xbDbf * d );
306 xbInt16 CheckTagIntegrity(
void *vpTag, xbInt16 iOpt );
307 xbInt16 CreateTag(
const xbString &sName,
const xbString &sKey,
const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay,
void **vpTag );
308 xbInt16 FindKey(
void *vpTag,
const void *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
309 xbInt16 GetFirstKey(
void *vpTag, xbInt16 iRetrieveSw );
311 xbInt16 GetLastKey(
void *vpTag, xbInt16 iRetrieveSw = 1 );
312 xbInt16 GetNextKey(
void *vpTag, xbInt16 iRetrieveSw = 1 );
313 xbInt16 GetPrevKey(
void *vpTag, xbInt16 iRetrieveSw = 1 );
314 xbInt32 GetKeyLen (
const void *vpTag )
const;
315 char GetKeyType (
const void *vpTag )
const;
316 xbString &GetKeyExpression(
const void *vpTag )
const;
317 xbString &GetKeyFilter(
const void *vpTag )
const;
318 void *GetTag( xbInt16 iTagNo )
const;
319 void *GetTag( xbString &sTagName )
const;
320 xbString &GetTagName(
void *vpTag )
const;
321 const char * GetTagName(
void *vpTag, xbInt16 iOpt )
const;
323 xbInt16 GetTagCount()
const;
324 xbBool GetUnique(
void *vpTag = NULL )
const;
325 xbBool GetSortOrder(
void *vpTag )
const;
326 xbInt16 SetCurTag( xbInt16 iTagNo );
327 xbInt16 SetCurTag( xbString &sTagName );
329 #ifdef XB_DEBUG_SUPPORT
330 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1,
void *vpTag = NULL );
331 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );
332 xbInt16 DumpIxForTag(
void *vpTag, xbInt16 iOutputOpt );
333 void DumpIxNodeChain(
void *vpTag, xbInt16 iOutputOpt )
const;
334 xbInt16 DumpNode(
void * vpTag, xbIxNode * pNode, xbInt16 iOption )
const;
337 xbInt16 Reindex(
void **vpTag );
342 xbInt16 AddKey(
void *vpTag, xbUInt32 ulRecNo );
343 xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
344 xbInt16 CheckForDupKey(
void *vpTag );
345 xbIxNode *CreateIxNode( xbUInt32 ulBufSize );
346 xbInt16 CreateKey(
void * vpTag, xbInt16 iOpt );
347 xbInt16 DeleteFromNode(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
348 xbInt16 DeleteKey(
void *vpTag );
349 xbInt16 DeleteTag(
void *vpTag );
350 xbInt16 FindKeyForCurRec(
void *vpTag );
351 xbInt16 GetKeyTypeN(
const void *vpTag )
const;
352 xbInt16 GetKeySts(
void *vpTag )
const;
353 xbInt16 GetLastKey( xbUInt32 ulNodeNo,
void *vpTag, xbInt16 iRetrieveSw = 1 );
354 xbInt16 InsertNodeI(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
355 xbInt16 InsertNodeL(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo,
char * cpKeyBuf, xbUInt32 uiPtr );
356 xbInt16 KeyExists(
void *vpTag = NULL );
357 xbInt16 ReadHeadBlock(xbInt16 iOpt);
359 xbInt16 SplitNodeI(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
360 xbInt16 SplitNodeL(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo,
char *cpKeyBuf, xbUInt32 uiPtr );
361 xbInt16 UpdateTagKey(
char cAction,
void *vpTag, xbUInt32 ulRecNo = 0 );
362 xbInt16 WriteHeadBlock( xbInt16 iOption );
365 xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
366 void AppendNodeChain(
void *vpTag, xbIxNode *npNode );
367 xbInt16 GetDbfPtr(
void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr )
const;
368 xbInt16 GetKeyPtr(
void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr )
const;
369 xbInt16 GetLastKeyForBlockNo(
void *vpTag, xbUInt32 ulBlockNo,
char *cpKeyBuf );
370 xbBool IsLeaf(
void *vpTag, xbIxNode *npNode )
const;
371 xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );
372 xbInt16 KeySetPosDel( xbNdxTag *npTag );
382struct XBDLLEXPORT xbMdxTag {
385 xbUInt32 ulTagHdrPageNo;
405 xbInt16 iKeysPerBlock;
414 xbUInt32 ulLeftChild;
415 xbUInt32 ulRightChild;
426 xbIxNode *npNodeChain;
451class XBDLLEXPORT xbIxMdx :
public xbIx {
453 xbIxMdx(
xbDbf * d );
455 virtual xbInt16 CheckTagIntegrity(
void *vpTag, xbInt16 iOpt );
456 virtual xbInt16 CreateTag(
const xbString &sName,
const xbString &sKey,
const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay,
void **vpTag );
457 virtual xbInt16 FindKey(
void *vpTag,
const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
458 virtual xbInt16 FindKey(
void *vpTag,
xbDouble dKey, xbInt16 iRetrieveSw );
459 virtual xbInt16 GetFirstKey(
void *vpTag, xbInt16 lRetrieveSw );
460 virtual xbString &GetKeyExpression(
const void *vpTag )
const;
461 virtual xbString &GetKeyFilter(
const void *vpTag )
const;
462 virtual char GetKeyType(
const void *vpTag )
const;
463 virtual xbInt16 GetLastKey(
void *vpTag, xbInt16 lRetrieveSw );
464 virtual xbInt16 GetNextKey(
void *vpTag, xbInt16 lRetrieveSw );
465 virtual xbInt16 GetPrevKey(
void *vpTag, xbInt16 lRetrieveSw );
466 virtual xbBool GetReuseEmptyNodesSw()
const;
467 virtual xbBool GetSortOrder(
void *vpTag )
const;
468 virtual void *GetTag( xbInt16 iTagNo )
const;
469 virtual void *GetTag( xbString &sTagName )
const;
470 virtual xbInt16 GetTagCount()
const;
472 virtual xbString &GetTagName(
void *vpTag )
const;
473 virtual const char * GetTagName(
void *vpTag, xbInt16 iOpt )
const;
474 virtual void GetTagName(
void *vpTag, xbString &sTagName );
476 virtual xbInt16 GetUnique(
void *vpTag )
const;
477 virtual xbInt16 SetCurTag( xbInt16 iTagNo );
478 virtual xbInt16 SetCurTag( xbString &sTagName );
479 void SetReuseEmptyNodesSw(
xbBool bReuse );
481 void TestStub(
char *s,
void *vpTag );
484 virtual xbInt16 Reindex(
void **vpTag );
490 xbInt16 AddKey(
void *vpTag, xbUInt32 ulRecNo );
491 xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );
492 void CalcBtreePointers();
493 char CalcTagKeyFmt( xbExp &exp );
495 xbInt16 CheckForDupKey(
void *vpTag );
496 virtual xbInt16 Close();
497 xbInt16 CreateKey(
void * vpTag, xbInt16 iOpt );
498 xbInt16 DeleteFromNode(
void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
499 xbInt16 DeleteKey(
void *vpTag );
501 virtual xbInt16 DeleteTag(
void *vpTag );
503 xbInt16 FindKeyForCurRec(
void *vpTag );
504 xbInt16 GetKeySts(
void *vpTag )
const;
505 xbInt16 GetLastKey( xbUInt32 ulBlockNo,
void *vpTag, xbInt16 lRetrieveSw );
506 void *GetTagTblPtr()
const;
508 xbInt16 HarvestTagNodes( xbMdxTag *mpTag,
xbBool bRecycleRoot =
xbFalse );
509 void Init( xbInt16 iOpt = 0 );
510 xbInt16 InsertNodeI(
void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
511 xbInt16 InsertNodeL(
void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo,
char *cpKeyBuf, xbUInt32 uiPtr );
512 xbInt16 KeyExists(
void * );
513 xbInt16 LoadTagTable();
514 xbInt16 ReadHeadBlock(xbInt16 iOpt);
516 xbInt16 SplitNodeI(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
517 xbInt16 SplitNodeL(
void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo,
char *cpKeyBuf, xbUInt32 uiPtr );
518 xbInt16 UpdateTagKey(
char cAction,
void *vpTag, xbUInt32 ulRecNo = 0 );
519 xbInt16 WriteHeadBlock( xbInt16 iOption );
521 #ifdef XB_DEBUG_SUPPORT
522 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1,
void *vpTag = NULL );
523 xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );
524 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );
525 xbInt16 DumpIxForTag(
void *vpTag, xbInt16 iOutputOpt );
526 void DumpIxNodeChain(
void *vpTag, xbInt16 iOutputOpt )
const;
538 xbInt16 iBlockFactor;
550 xbUInt32 ulFirstFreePage;
551 xbUInt32 ulNoOfBlockAvail;
565 xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
566 void AppendNodeChain(
void *vpTag, xbIxNode *npNode );
567 xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
568 xbMdxTag *ClearTagTable();
569 xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );
570 xbInt16 GetDbfPtr(
void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr )
const;
571 xbInt16 GetKeyPtr(
void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr )
const;
572 xbInt16 GetLastKeyForBlockNo(
void *vpTag, xbUInt32 ulBlockNo,
char *cpKeyBuf );
573 xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt,
xbBool bHarvestRoot =
xbFalse );
574 xbBool IsLeaf(
void *vpTag, xbIxNode *npNode )
const;
575 xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );
576 xbInt16 KeySetPosDel( xbMdxTag *mpTag );
577 xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );
578 xbUInt32 PageToBlock( xbUInt32 ulPageNo );
579 xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );
580 xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );
582 #ifdef XB_DEBUG_SUPPORT
583 xbInt16 PrintKey(
void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth,
char cType, xbInt16 iOutputOpt );
593class XBDLLEXPORT xbIxTdx :
public xbIxMdx {
595 xbIxTdx(
xbDbf * d );
598 xbInt16 CreateTag(
const xbString &sName,
const xbString &sKey,
const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay,
void **vpTag );
603 xbInt16 DeleteTag(
void *vpTag );
Definition: xbdate.cpp:19
double xbDouble
Definition: xbtypes.h:23
short int xbBool
Definition: xbtypes.h:24
class XBDLLEXPORT xbDbf
Definition: xbtblmgr.h:28
#define XB_NO_ERROR
Definition: xbretcod.h:24
#define xbFalse
Definition: xbtypes.h:29