summaryrefslogtreecommitdiff
path: root/docs/doxygen/latex/xbindex_8h_source.tex
blob: 157273023be649e54f6497f52faa649ac32d0a78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
\hypertarget{xbindex_8h_source}{}\doxysection{xbindex.\+h}
\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h}}
\mbox{\hyperlink{xbindex_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/*  xbindex.h}}
\DoxyCodeLine{2 \textcolor{comment}{}}
\DoxyCodeLine{3 \textcolor{comment}{XBase64 Software Library}}
\DoxyCodeLine{4 \textcolor{comment}{}}
\DoxyCodeLine{5 \textcolor{comment}{Copyright (c) 1997,2003,2014, 2018, 2022 Gary A Kunkel}}
\DoxyCodeLine{6 \textcolor{comment}{}}
\DoxyCodeLine{7 \textcolor{comment}{The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.}}
\DoxyCodeLine{8 \textcolor{comment}{}}
\DoxyCodeLine{9 \textcolor{comment}{Email Contact:}}
\DoxyCodeLine{10 \textcolor{comment}{}}
\DoxyCodeLine{11 \textcolor{comment}{    XDB-\/devel@lists.sourceforge.net}}
\DoxyCodeLine{12 \textcolor{comment}{    XDB-\/users@lists.sourceforge.net}}
\DoxyCodeLine{13 \textcolor{comment}{}}
\DoxyCodeLine{14 \textcolor{comment}{*/}}
\DoxyCodeLine{15 }
\DoxyCodeLine{16 }
\DoxyCodeLine{17 \textcolor{preprocessor}{\#ifndef \_\_XB\_INDEX\_H\_\_}}
\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_INDEX\_H\_\_}}
\DoxyCodeLine{19 }
\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
\DoxyCodeLine{21 }
\DoxyCodeLine{22 }
\DoxyCodeLine{23 \textcolor{preprocessor}{\#define XB\_ADD\_KEY 1}}
\DoxyCodeLine{24 \textcolor{preprocessor}{\#define XB\_UPD\_KEY 2}}
\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_DEL\_KEY 3}}
\DoxyCodeLine{26 }
\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
\DoxyCodeLine{28 }
\DoxyCodeLine{29 }
\DoxyCodeLine{30 }
\DoxyCodeLine{32 \textcolor{comment}{// structure for index nodes, each node contains information regarding one block}}
\DoxyCodeLine{33 \textcolor{keyword}{struct }XBDLLEXPORT xbIxNode \{}
\DoxyCodeLine{34   xbIxNode *npPrev;                     \textcolor{comment}{// pointer to previous node in chain}}
\DoxyCodeLine{35   xbIxNode *npNext;                     \textcolor{comment}{// pointer to next node in chain}}
\DoxyCodeLine{36   xbUInt32 iCurKeyNo;                   \textcolor{comment}{// current key number in the node, 0 offset}}
\DoxyCodeLine{37   xbUInt32 ulBlockNo;                   \textcolor{comment}{// this block number}}
\DoxyCodeLine{38   xbUInt32 ulBufSize;                   \textcolor{comment}{// size of cpBlockData}}
\DoxyCodeLine{39   \textcolor{keywordtype}{char}     *cpBlockData;                \textcolor{comment}{// pointer to memory version of block data stored in file}}
\DoxyCodeLine{40 \};}
\DoxyCodeLine{42 }
\DoxyCodeLine{43 }
\DoxyCodeLine{45 }
\DoxyCodeLine{120 \textcolor{keyword}{class }XBDLLEXPORT xbIx : \textcolor{keyword}{public} xbFile \{}
\DoxyCodeLine{121  \textcolor{keyword}{public}:}
\DoxyCodeLine{122    xbIx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
\DoxyCodeLine{123    \textcolor{keyword}{virtual} \string~xbIx();}
\DoxyCodeLine{124 }
\DoxyCodeLine{125    \textcolor{keyword}{virtual} xbInt16  CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) = 0;}
\DoxyCodeLine{126    \textcolor{keyword}{virtual} xbInt16  Close();}
\DoxyCodeLine{127    \textcolor{keyword}{virtual} xbInt16  CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag ) = 0;}
\DoxyCodeLine{128    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbString \&sKey, xbInt16 iRetrieveSw );}
\DoxyCodeLine{129    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{char} * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
\DoxyCodeLine{130    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbBcd \&bcd, xbInt16 iRetrieveSw );}
\DoxyCodeLine{131    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbDate \&dtKey, xbInt16 iRetrieveSw );}
\DoxyCodeLine{132    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
\DoxyCodeLine{133    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;}
\DoxyCodeLine{134    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     *GetCurTag() \textcolor{keyword}{const};}
\DoxyCodeLine{135    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}}    *GetDbf() \textcolor{keyword}{const};}
\DoxyCodeLine{136 }
\DoxyCodeLine{137    \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{138    \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{139    \textcolor{keyword}{virtual} \textcolor{keywordtype}{char}     GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{140    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetLocked() \textcolor{keyword}{const};}
\DoxyCodeLine{141 }
\DoxyCodeLine{142    \textcolor{keyword}{virtual} xbInt16  GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
\DoxyCodeLine{143    \textcolor{keyword}{virtual} xbInt16  GetFirstKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{144    \textcolor{keyword}{virtual} xbInt16  GetFirstKey();}
\DoxyCodeLine{145 }
\DoxyCodeLine{146    \textcolor{keyword}{virtual} xbInt16  GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
\DoxyCodeLine{147    \textcolor{keyword}{virtual} xbInt16  GetLastKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{148    \textcolor{keyword}{virtual} xbInt16  GetLastKey();}
\DoxyCodeLine{149 }
\DoxyCodeLine{150    \textcolor{keyword}{virtual} xbInt16  GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
\DoxyCodeLine{151    \textcolor{keyword}{virtual} xbInt16  GetNextKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{152    \textcolor{keyword}{virtual} xbInt16  GetNextKey();}
\DoxyCodeLine{153 }
\DoxyCodeLine{154    \textcolor{keyword}{virtual} xbInt16  GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
\DoxyCodeLine{155    \textcolor{keyword}{virtual} xbInt16  GetPrevKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{156    \textcolor{keyword}{virtual} xbInt16  GetPrevKey();}
\DoxyCodeLine{157 }
\DoxyCodeLine{158    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{159    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     *GetTag( xbString \&sTagName ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{160    \textcolor{keyword}{virtual} xbInt16  GetTagCount() \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{161 }
\DoxyCodeLine{162    \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{163    \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{164    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName ) \{\};}
\DoxyCodeLine{165 }
\DoxyCodeLine{166    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{167    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{168 }
\DoxyCodeLine{169    \textcolor{keyword}{virtual} xbInt16  Open( \textcolor{keyword}{const} xbString \&sFileName );}
\DoxyCodeLine{170    \textcolor{keyword}{virtual} xbInt16  SetCurTag( xbInt16 iTagNo ) = 0;}
\DoxyCodeLine{171    \textcolor{keyword}{virtual} xbInt16  SetCurTag( xbString \&sTagName ) = 0;}
\DoxyCodeLine{172    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     SetCurTag( \textcolor{keywordtype}{void} * vpCurTag );}
\DoxyCodeLine{173    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     SetLocked( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked );}
\DoxyCodeLine{174 }
\DoxyCodeLine{175    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag ) \{\};}
\DoxyCodeLine{176 }
\DoxyCodeLine{177 }
\DoxyCodeLine{178 }
\DoxyCodeLine{179    \textcolor{keyword}{virtual} xbInt16  Reindex( \textcolor{keywordtype}{void} **vpTag ) = 0;}
\DoxyCodeLine{180  }
\DoxyCodeLine{181 }
\DoxyCodeLine{182 \textcolor{preprocessor}{   \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{183    \textcolor{keyword}{virtual} xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}}; \}}
\DoxyCodeLine{184    \textcolor{keyword}{virtual} xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;}
\DoxyCodeLine{185    \textcolor{keyword}{virtual} xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) = 0;}
\DoxyCodeLine{186    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}    DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{187    \textcolor{keyword}{virtual} xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
\DoxyCodeLine{188    \textcolor{keyword}{virtual} xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL  ) = 0;}
\DoxyCodeLine{189  }
\DoxyCodeLine{190 \textcolor{preprocessor}{   \#endif}}
\DoxyCodeLine{191 }
\DoxyCodeLine{192  \textcolor{keyword}{protected}:}
\DoxyCodeLine{193    \textcolor{keyword}{friend}  \textcolor{keyword}{class    }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{194 }
\DoxyCodeLine{195    \textcolor{keyword}{virtual} xbInt16  AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo ) = 0;}
\DoxyCodeLine{196    \textcolor{keyword}{virtual} xbInt16  AddKeys( xbUInt32 ulRecNo );}
\DoxyCodeLine{197    \textcolor{keyword}{virtual} xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
\DoxyCodeLine{198    \textcolor{keyword}{virtual} xbInt16  BSearchBlock( \textcolor{keywordtype}{char} cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lSearchKeyLen, xbInt16 \&iCompRc, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDescending = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} ) \textcolor{keyword}{const};}
\DoxyCodeLine{199    \textcolor{keyword}{virtual} xbInt16  CheckForDupKeys();}
\DoxyCodeLine{200    \textcolor{keyword}{virtual} xbInt16  CheckForDupKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{201    \textcolor{keyword}{virtual} xbInt16  CompareKey( \textcolor{keywordtype}{char} cKeyType, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v1, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v2, \textcolor{keywordtype}{size\_t} lKeyLen ) \textcolor{keyword}{const};}
\DoxyCodeLine{202    \textcolor{keyword}{virtual} xbInt16  CreateKeys( xbInt16 iOpt );}
\DoxyCodeLine{203    \textcolor{keyword}{virtual} xbInt16  CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt ) = 0;}
\DoxyCodeLine{204    \textcolor{keyword}{virtual} xbInt16  DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;}
\DoxyCodeLine{205    \textcolor{keyword}{virtual} xbInt16  DeleteKeys();}
\DoxyCodeLine{206    \textcolor{keyword}{virtual} xbInt16  DeleteKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{207    \textcolor{keyword}{virtual} xbInt16  DeleteTag( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{208 }
\DoxyCodeLine{209    \textcolor{keyword}{virtual} xbInt16  FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{210    \textcolor{keyword}{virtual} xbIxNode *FreeNodeChain( xbIxNode *np );}
\DoxyCodeLine{211    \textcolor{keyword}{virtual} xbInt16  GetBlock( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );}
\DoxyCodeLine{212    \textcolor{keyword}{virtual} xbInt32  GetKeyCount( xbIxNode *npNode ) \textcolor{keyword}{const};}
\DoxyCodeLine{213    \textcolor{keyword}{virtual} \textcolor{keywordtype}{char}     *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) \textcolor{keyword}{const};}
\DoxyCodeLine{214    \textcolor{keyword}{virtual} xbInt16  GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{215    \textcolor{keyword}{virtual} xbInt16  GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
\DoxyCodeLine{216    \textcolor{keyword}{virtual} xbInt16  InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr ) = 0;}
\DoxyCodeLine{217    \textcolor{keyword}{virtual} xbInt16  InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
\DoxyCodeLine{218    \textcolor{keyword}{virtual} xbInt16  KeyExists( \textcolor{keywordtype}{void} * ) = 0;}
\DoxyCodeLine{219    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     NodeFree( xbIxNode * ixNode );}
\DoxyCodeLine{220    \textcolor{keyword}{virtual} xbInt16  ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;}
\DoxyCodeLine{221  \textcolor{comment}{//  virtual xbInt16  Reindex( void **vpTag ) = 0;}}
\DoxyCodeLine{222    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     SetDbf( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
\DoxyCodeLine{223    \textcolor{keyword}{virtual} xbInt16  SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr ) = 0;}
\DoxyCodeLine{224    \textcolor{keyword}{virtual} xbInt16  SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
\DoxyCodeLine{225    \textcolor{keyword}{virtual} xbInt16  UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 ) = 0;}
\DoxyCodeLine{226    \textcolor{keyword}{virtual} xbInt16  WriteHeadBlock( xbInt16 iOption ) = 0;}
\DoxyCodeLine{227 }
\DoxyCodeLine{228    \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
\DoxyCodeLine{229    \textcolor{keywordtype}{char}  *cNodeBuf;               \textcolor{comment}{// pointer to memory for processing in a block of index data}}
\DoxyCodeLine{230    \textcolor{keywordtype}{void}  *vpCurTag;               \textcolor{comment}{// pointer to active tag.  Single index files have only one tag}}
\DoxyCodeLine{231 }
\DoxyCodeLine{232  \textcolor{keyword}{private}:}
\DoxyCodeLine{233    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) = 0;}
\DoxyCodeLine{234    \textcolor{keyword}{virtual} xbInt16  GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{235    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{236    \textcolor{comment}{// virtual void     SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;}}
\DoxyCodeLine{237 }
\DoxyCodeLine{238    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   bLocked;               \textcolor{comment}{// index file locked?}}
\DoxyCodeLine{239 \};}
\DoxyCodeLine{240 }
\DoxyCodeLine{241 \textcolor{preprocessor}{\#ifdef XB\_NDX\_SUPPORT}}
\DoxyCodeLine{242 }
\DoxyCodeLine{243 \textcolor{preprocessor}{\#define XB\_NDX\_BLOCK\_SIZE 512}}
\DoxyCodeLine{244 }
\DoxyCodeLine{245 }
\DoxyCodeLine{247 \textcolor{keyword}{struct }XBDLLEXPORT xbNdxTag \{}
\DoxyCodeLine{248 }
\DoxyCodeLine{249    \textcolor{comment}{// NDX File Header Fields}}
\DoxyCodeLine{250    xbUInt32 ulRootBlock;     \textcolor{comment}{// header node is 0}}
\DoxyCodeLine{251    xbUInt32 ulTotalBlocks;   \textcolor{comment}{// includes header node}}
\DoxyCodeLine{252    \textcolor{keywordtype}{char}     cKeyType;        \textcolor{comment}{// C = Char, F = Numeric, D = Date}}
\DoxyCodeLine{253    xbInt16  iKeyLen;         \textcolor{comment}{// length of key data}}
\DoxyCodeLine{254    xbInt16  iKeysPerBlock;   \textcolor{comment}{// max number keys per block  <=100}}
\DoxyCodeLine{255    xbInt16  iKeyType;        \textcolor{comment}{// 00 = Char, 01 = Numeric}}
\DoxyCodeLine{256    xbInt16  iKeyItemLen;     \textcolor{comment}{// KeyLen + 8 bytes}}
\DoxyCodeLine{257    \textcolor{keywordtype}{char}     cSerNo;          \textcolor{comment}{// rolling incrementing serial number +1 on each index update}}
\DoxyCodeLine{258    xbInt16  iUnique;         \textcolor{comment}{// True if unique}}
\DoxyCodeLine{259    xbString sKeyExpression;  \textcolor{comment}{// index expression}}
\DoxyCodeLine{260    \textcolor{comment}{// end of NDX Header field}}
\DoxyCodeLine{261 }
\DoxyCodeLine{262    xbExp     *exp;           \textcolor{comment}{// pointer to expression for expression keys}}
\DoxyCodeLine{263    time\_t    tNodeChainTs;   \textcolor{comment}{// node chain time stamp}}
\DoxyCodeLine{264    xbIxNode  *npNodeChain;}
\DoxyCodeLine{265    xbIxNode  *npCurNode;}
\DoxyCodeLine{266    \textcolor{keywordtype}{char}      *cpKeyBuf;     \textcolor{comment}{// key buffer, for searches and adds}}
\DoxyCodeLine{267    \textcolor{keywordtype}{char}      *cpKeyBuf2;    \textcolor{comment}{// key buffer, for deletes}}
\DoxyCodeLine{268    xbString  sTagName;      \textcolor{comment}{// tag name -\/ is the file name without the extension}}
\DoxyCodeLine{269    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}    bFoundSts;     \textcolor{comment}{// key found?  used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
\DoxyCodeLine{270 }
\DoxyCodeLine{271 }
\DoxyCodeLine{272    xbInt16   iKeySts;       \textcolor{comment}{// key updated?  set in method CreateKey, checked in AddKey and DeleteKey routines}}
\DoxyCodeLine{273                             \textcolor{comment}{//   old key filtered     new key filtered   iKeySts}}
\DoxyCodeLine{274                             \textcolor{comment}{//       Y                      Y              XB\_UPD\_KEY  2 -\/ update key if changed (delete and add)}}
\DoxyCodeLine{275                             \textcolor{comment}{//       Y                      N              XB\_DEL\_KEY  3 -\/ delete key}}
\DoxyCodeLine{276                             \textcolor{comment}{//       N                      Y              XB\_ADD\_KEY  1 -\/ add key}}
\DoxyCodeLine{277                             \textcolor{comment}{//       N                      N                          0 -\/ no update}}
\DoxyCodeLine{278 }
\DoxyCodeLine{279 \};}
\DoxyCodeLine{281 }
\DoxyCodeLine{283 }
\DoxyCodeLine{302 \textcolor{keyword}{class }XBDLLEXPORT xbIxNdx : \textcolor{keyword}{public} xbIx \{}
\DoxyCodeLine{303  \textcolor{keyword}{public}:}
\DoxyCodeLine{304    xbIxNdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
\DoxyCodeLine{305    \string~xbIxNdx();}
\DoxyCodeLine{306    xbInt16  CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
\DoxyCodeLine{307    xbInt16  CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
\DoxyCodeLine{308    xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
\DoxyCodeLine{309    xbInt16  GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw );}
\DoxyCodeLine{310 }
\DoxyCodeLine{311    xbInt16  GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
\DoxyCodeLine{312    xbInt16  GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
\DoxyCodeLine{313    xbInt16  GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
\DoxyCodeLine{314    xbInt32  GetKeyLen  ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{315    \textcolor{keywordtype}{char}     GetKeyType ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{316    xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{317    xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{318    \textcolor{keywordtype}{void}     *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
\DoxyCodeLine{319    \textcolor{keywordtype}{void}     *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
\DoxyCodeLine{320    xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{321    \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
\DoxyCodeLine{322 }
\DoxyCodeLine{323    xbInt16  GetTagCount() \textcolor{keyword}{const};}
\DoxyCodeLine{324    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetUnique( \textcolor{keywordtype}{void} *vpTag = NULL ) \textcolor{keyword}{const};}
\DoxyCodeLine{325    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{326    xbInt16  SetCurTag( xbInt16 iTagNo );}
\DoxyCodeLine{327    xbInt16  SetCurTag( xbString \&sTagName );}
\DoxyCodeLine{328 }
\DoxyCodeLine{329 \textcolor{preprocessor}{   \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{330    xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL  );}
\DoxyCodeLine{331    xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );}
\DoxyCodeLine{332    xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
\DoxyCodeLine{333    \textcolor{keywordtype}{void}    DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
\DoxyCodeLine{334    xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
\DoxyCodeLine{335 \textcolor{preprocessor}{   \#endif}}
\DoxyCodeLine{336 }
\DoxyCodeLine{337   xbInt16  Reindex( \textcolor{keywordtype}{void} **vpTag );}
\DoxyCodeLine{338  }
\DoxyCodeLine{339 }
\DoxyCodeLine{340  \textcolor{keyword}{protected}:}
\DoxyCodeLine{341    \textcolor{keyword}{friend}   \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{342    xbInt16  AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
\DoxyCodeLine{343    xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
\DoxyCodeLine{344    xbInt16  CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{345    xbIxNode *CreateIxNode( xbUInt32 ulBufSize );}
\DoxyCodeLine{346    xbInt16  CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
\DoxyCodeLine{347    xbInt16  DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
\DoxyCodeLine{348    xbInt16  DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{349    xbInt16  DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{350    xbInt16  FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{351    xbInt16  GetKeyTypeN( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{352    xbInt16  GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{353    xbInt16  GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
\DoxyCodeLine{354    xbInt16  InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
\DoxyCodeLine{355    xbInt16  InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr );}
\DoxyCodeLine{356    xbInt16  KeyExists( \textcolor{keywordtype}{void} *vpTag = NULL );}
\DoxyCodeLine{357    xbInt16  ReadHeadBlock(xbInt16 iOpt);   \textcolor{comment}{// read the header node of the disk NDX file}}
\DoxyCodeLine{358 \textcolor{comment}{//   xbInt16  Reindex( void **vpTag );}}
\DoxyCodeLine{359    xbInt16  SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
\DoxyCodeLine{360    xbInt16  SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
\DoxyCodeLine{361    xbInt16  UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
\DoxyCodeLine{362    xbInt16  WriteHeadBlock( xbInt16 iOption );}
\DoxyCodeLine{363 }
\DoxyCodeLine{364  \textcolor{keyword}{private}:}
\DoxyCodeLine{365    xbInt16  AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
\DoxyCodeLine{366    \textcolor{keywordtype}{void}     AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
\DoxyCodeLine{367    xbInt16  GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
\DoxyCodeLine{368    xbInt16  GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
\DoxyCodeLine{369    xbInt16  GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
\DoxyCodeLine{370    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
\DoxyCodeLine{371    xbInt16  KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );}
\DoxyCodeLine{372    xbInt16  KeySetPosDel( xbNdxTag *npTag );}
\DoxyCodeLine{373    xbNdxTag *ndxTag;}
\DoxyCodeLine{374 \};}
\DoxyCodeLine{375 }
\DoxyCodeLine{376 \textcolor{preprocessor}{\#endif   }\textcolor{comment}{/* XB\_NDX\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{377 }
\DoxyCodeLine{378 }
\DoxyCodeLine{379 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
\DoxyCodeLine{380 \textcolor{comment}{//\#define XB\_MDX\_BLOCK\_SIZE 1024}}
\DoxyCodeLine{381 }
\DoxyCodeLine{382 \textcolor{keyword}{struct }XBDLLEXPORT xbMdxTag \{}
\DoxyCodeLine{383 }
\DoxyCodeLine{384   \textcolor{comment}{// next 7 fields comprise the tag table entry}}
\DoxyCodeLine{385   xbUInt32      ulTagHdrPageNo;   \textcolor{comment}{// 512 byte page number, NOT block number}}
\DoxyCodeLine{386   \textcolor{keywordtype}{char}          cTagName[11];}
\DoxyCodeLine{387   \textcolor{keywordtype}{char}          cKeyFmt;          \textcolor{comment}{// always 0x10 w/ DBase V7}}
\DoxyCodeLine{388   \textcolor{keywordtype}{char}          cLeftChild;       \textcolor{comment}{// cFwdTagThread}}
\DoxyCodeLine{389   \textcolor{keywordtype}{char}          cRightChild;      \textcolor{comment}{// cFwdTagThread2}}
\DoxyCodeLine{390   \textcolor{keywordtype}{char}          cParent;          \textcolor{comment}{// cBwdTagThread}}
\DoxyCodeLine{391   \textcolor{keywordtype}{char}          c2;}
\DoxyCodeLine{392   \textcolor{keywordtype}{char}          cKeyType;         \textcolor{comment}{// C,D,N}}
\DoxyCodeLine{393 }
\DoxyCodeLine{394   xbUInt32      ulRootPage;       \textcolor{comment}{// 512 byte page number, NOT block number}}
\DoxyCodeLine{395   xbUInt32      ulTagSize;        \textcolor{comment}{// Number of 512 byte pages allocated to the tag.   Tag size of two is a single 1024 block}}
\DoxyCodeLine{396 }
\DoxyCodeLine{397   \textcolor{keywordtype}{char}          cKeyFmt2;         \textcolor{comment}{// 0x10 -\/ base}}
\DoxyCodeLine{398                                   \textcolor{comment}{// 0x08 -\/ descending}}
\DoxyCodeLine{399                                   \textcolor{comment}{// 0x40 -\/ unique}}
\DoxyCodeLine{400   \textcolor{keywordtype}{char}          cKeyType2;}
\DoxyCodeLine{401   \textcolor{comment}{// one unused byte fits here}}
\DoxyCodeLine{402 }
\DoxyCodeLine{403   \textcolor{keywordtype}{char}          cTag11;          \textcolor{comment}{// dbase sets to 0x1B}}
\DoxyCodeLine{404   xbInt16       iKeyLen;}
\DoxyCodeLine{405   xbInt16       iKeysPerBlock;}
\DoxyCodeLine{406   xbInt16       iSecKeyType;}
\DoxyCodeLine{407   xbInt16       iKeyItemLen;    \textcolor{comment}{// iKeyLen + 4}}
\DoxyCodeLine{408 }
\DoxyCodeLine{409   \textcolor{keywordtype}{char}          cSerialNo;      \textcolor{comment}{// Increments +1 for each tag update}}
\DoxyCodeLine{410   \textcolor{keywordtype}{char}          cUnique;}
\DoxyCodeLine{411   xbString      *sKeyExp;       \textcolor{comment}{// Key expression}}
\DoxyCodeLine{412   \textcolor{keywordtype}{char}          cHasFilter;     \textcolor{comment}{// 0x00 or 0x01}}
\DoxyCodeLine{413   \textcolor{keywordtype}{char}          cHasKeys;       \textcolor{comment}{// 0x00 or 0x01}}
\DoxyCodeLine{414   xbUInt32      ulLeftChild;    \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
\DoxyCodeLine{415   xbUInt32      ulRightChild;   \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
\DoxyCodeLine{416 }
\DoxyCodeLine{417   \textcolor{keywordtype}{char}          cTagYY;}
\DoxyCodeLine{418   \textcolor{keywordtype}{char}          cTagMM;}
\DoxyCodeLine{419   \textcolor{keywordtype}{char}          cTagDD;}
\DoxyCodeLine{420 }
\DoxyCodeLine{421   \textcolor{keywordtype}{char}          cKeyFmt3;      \textcolor{comment}{// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation}}
\DoxyCodeLine{422 }
\DoxyCodeLine{423   xbString      *sFiltExp;     \textcolor{comment}{// Filter expression}}
\DoxyCodeLine{424 }
\DoxyCodeLine{425   time\_t        tNodeChainTs;}
\DoxyCodeLine{426   xbIxNode      *npNodeChain;}
\DoxyCodeLine{427   xbIxNode      *npCurNode;}
\DoxyCodeLine{428   xbExp         *exp;          \textcolor{comment}{// pointer to expression for expression based tags}}
\DoxyCodeLine{429   xbExp         *filter;       \textcolor{comment}{// pointer to expression for index filter}}
\DoxyCodeLine{430 }
\DoxyCodeLine{431   \textcolor{keywordtype}{char}          *cpKeyBuf;     \textcolor{comment}{// key buffer}}
\DoxyCodeLine{432   \textcolor{keywordtype}{char}          *cpKeyBuf2;    \textcolor{comment}{// key buffer}}
\DoxyCodeLine{433   xbString      *sTagName;     \textcolor{comment}{// string tag name}}
\DoxyCodeLine{434 }
\DoxyCodeLine{435 }
\DoxyCodeLine{436   xbMdxTag      *next;}
\DoxyCodeLine{437   \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}        bFoundSts;     \textcolor{comment}{// key found?  used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
\DoxyCodeLine{438 }
\DoxyCodeLine{439 }
\DoxyCodeLine{440   xbInt16       iKeySts;       \textcolor{comment}{// key updated?  set in method CreateKey, checked in AddKey and DeleteKey routines}}
\DoxyCodeLine{441                                \textcolor{comment}{//   old key filtered     new key filtered   iKeySts}}
\DoxyCodeLine{442                                \textcolor{comment}{//       Y                      Y              XB\_UPD\_KEY  2 -\/ update key if changed (delete and add)}}
\DoxyCodeLine{443                                \textcolor{comment}{//       Y                      N              XB\_DEL\_KEY  3 -\/ delete key}}
\DoxyCodeLine{444                                \textcolor{comment}{//       N                      Y              XB\_ADD\_KEY  1 -\/ add key}}
\DoxyCodeLine{445                                \textcolor{comment}{//       N                      N                          0 -\/ no update}}
\DoxyCodeLine{446 }
\DoxyCodeLine{447 }
\DoxyCodeLine{448 \};}
\DoxyCodeLine{449 }
\DoxyCodeLine{450 }
\DoxyCodeLine{451 \textcolor{keyword}{class }XBDLLEXPORT xbIxMdx : \textcolor{keyword}{public} xbIx \{}
\DoxyCodeLine{452  \textcolor{keyword}{public}:}
\DoxyCodeLine{453    xbIxMdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
\DoxyCodeLine{454    \string~xbIxMdx();}
\DoxyCodeLine{455    \textcolor{keyword}{virtual} xbInt16  CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
\DoxyCodeLine{456    \textcolor{keyword}{virtual} xbInt16  CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
\DoxyCodeLine{457    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
\DoxyCodeLine{458    \textcolor{keyword}{virtual} xbInt16  FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
\DoxyCodeLine{459    \textcolor{keyword}{virtual} xbInt16  GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
\DoxyCodeLine{460    \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{461    \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{462    \textcolor{keyword}{virtual} \textcolor{keywordtype}{char}     GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{463    \textcolor{keyword}{virtual} xbInt16  GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
\DoxyCodeLine{464    \textcolor{keyword}{virtual} xbInt16  GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
\DoxyCodeLine{465    \textcolor{keyword}{virtual} xbInt16  GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
\DoxyCodeLine{466    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetReuseEmptyNodesSw() \textcolor{keyword}{const};}
\DoxyCodeLine{467    \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{468    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
\DoxyCodeLine{469    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
\DoxyCodeLine{470    \textcolor{keyword}{virtual} xbInt16  GetTagCount() \textcolor{keyword}{const};}
\DoxyCodeLine{471 }
\DoxyCodeLine{472    \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{473    \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
\DoxyCodeLine{474    \textcolor{keyword}{virtual} \textcolor{keywordtype}{void}     GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName );}
\DoxyCodeLine{475 }
\DoxyCodeLine{476    \textcolor{keyword}{virtual} xbInt16  GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{477    \textcolor{keyword}{virtual} xbInt16  SetCurTag( xbInt16 iTagNo );}
\DoxyCodeLine{478    \textcolor{keyword}{virtual} xbInt16  SetCurTag( xbString \&sTagName );}
\DoxyCodeLine{479            \textcolor{keywordtype}{void}     SetReuseEmptyNodesSw( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuse );}
\DoxyCodeLine{480 }
\DoxyCodeLine{481            \textcolor{keywordtype}{void}     TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{482 }
\DoxyCodeLine{483 }
\DoxyCodeLine{484    \textcolor{keyword}{virtual} xbInt16  Reindex( \textcolor{keywordtype}{void} **vpTag );}
\DoxyCodeLine{485 }
\DoxyCodeLine{486 }
\DoxyCodeLine{487  \textcolor{keyword}{protected}:}
\DoxyCodeLine{488    \textcolor{keyword}{friend}   \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{489 }
\DoxyCodeLine{490    xbInt16  AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
\DoxyCodeLine{491    xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );}
\DoxyCodeLine{492    \textcolor{keywordtype}{void}     CalcBtreePointers();}
\DoxyCodeLine{493    \textcolor{keywordtype}{char}     CalcTagKeyFmt( xbExp \&exp );}
\DoxyCodeLine{494 }
\DoxyCodeLine{495    xbInt16  CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{496    \textcolor{keyword}{virtual}  xbInt16  Close();}
\DoxyCodeLine{497    xbInt16  CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
\DoxyCodeLine{498    xbInt16  DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
\DoxyCodeLine{499    xbInt16  DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{500 }
\DoxyCodeLine{501    \textcolor{keyword}{virtual}  xbInt16  DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{502 }
\DoxyCodeLine{503    xbInt16  FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{504    xbInt16  GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
\DoxyCodeLine{505    xbInt16  GetLastKey( xbUInt32 ulBlockNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
\DoxyCodeLine{506    \textcolor{keywordtype}{void}     *GetTagTblPtr() \textcolor{keyword}{const};}
\DoxyCodeLine{507 }
\DoxyCodeLine{508    xbInt16  HarvestTagNodes( xbMdxTag *mpTag, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bRecycleRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
\DoxyCodeLine{509    \textcolor{keywordtype}{void}     Init( xbInt16 iOpt = 0 );}
\DoxyCodeLine{510    xbInt16  InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
\DoxyCodeLine{511    xbInt16  InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
\DoxyCodeLine{512    xbInt16  KeyExists( \textcolor{keywordtype}{void} * );}
\DoxyCodeLine{513    xbInt16  LoadTagTable();}
\DoxyCodeLine{514    xbInt16  ReadHeadBlock(xbInt16 iOpt);   \textcolor{comment}{// read the header node of the disk file}}
\DoxyCodeLine{515    \textcolor{comment}{//virtual  xbInt16  Reindex( void **vpTag );}}
\DoxyCodeLine{516    xbInt16  SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
\DoxyCodeLine{517    xbInt16  SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
\DoxyCodeLine{518    xbInt16  UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
\DoxyCodeLine{519    xbInt16  WriteHeadBlock( xbInt16 iOption );}
\DoxyCodeLine{520 }
\DoxyCodeLine{521 \textcolor{preprocessor}{   \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{522    xbInt16  DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL  );}
\DoxyCodeLine{523    xbInt16  DumpFreeBlocks( xbInt16 iOpt = 0 );}
\DoxyCodeLine{524    xbInt16  DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );}
\DoxyCodeLine{525    xbInt16  DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
\DoxyCodeLine{526    \textcolor{keywordtype}{void}     DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
\DoxyCodeLine{527 \textcolor{preprocessor}{   \#endif}}
\DoxyCodeLine{528 }
\DoxyCodeLine{529 }
\DoxyCodeLine{530    xbMdxTag *mdxTagTbl;}
\DoxyCodeLine{531 }
\DoxyCodeLine{532 \textcolor{comment}{// MDX File Header Fields}}
\DoxyCodeLine{533    \textcolor{keywordtype}{char}     cVersion;}
\DoxyCodeLine{534    \textcolor{keywordtype}{char}     cCreateYY;}
\DoxyCodeLine{535    \textcolor{keywordtype}{char}     cCreateMM;}
\DoxyCodeLine{536    \textcolor{keywordtype}{char}     cCreateDD;}
\DoxyCodeLine{537    xbString sFileName;}
\DoxyCodeLine{538    xbInt16  iBlockFactor;          \textcolor{comment}{// 1-\/32 \#of 512 byte segments in a block}}
\DoxyCodeLine{539 }
\DoxyCodeLine{540    \textcolor{comment}{// use file version}}
\DoxyCodeLine{541    \textcolor{comment}{// xbInt16  iBlockSize;         // Stored at the xbFile level}}
\DoxyCodeLine{542 }
\DoxyCodeLine{543    \textcolor{keywordtype}{char}     cProdIxFlag;}
\DoxyCodeLine{544    \textcolor{keywordtype}{char}     cTagEntryCnt;}
\DoxyCodeLine{545    xbInt16  iTagLen;}
\DoxyCodeLine{546    xbInt16  iTagUseCnt;}
\DoxyCodeLine{547    \textcolor{keywordtype}{char}     cNextTag;             \textcolor{comment}{// byte 28 +1}}
\DoxyCodeLine{548    \textcolor{keywordtype}{char}     c1B;                  \textcolor{comment}{// always 0x1B}}
\DoxyCodeLine{549    xbUInt32 ulPageCnt;            \textcolor{comment}{// number of 512 byte pages in the mdx file}}
\DoxyCodeLine{550    xbUInt32 ulFirstFreePage;      \textcolor{comment}{// page number corresponding to the next free block}}
\DoxyCodeLine{551    xbUInt32 ulNoOfBlockAvail;     \textcolor{comment}{// might be improperly named??  not sure how it is used}}
\DoxyCodeLine{552    \textcolor{keywordtype}{char}     cUpdateYY;}
\DoxyCodeLine{553    \textcolor{keywordtype}{char}     cUpdateMM;}
\DoxyCodeLine{554    \textcolor{keywordtype}{char}     cUpdateDD;}
\DoxyCodeLine{555    \textcolor{comment}{// end of MDX Header fields}}
\DoxyCodeLine{556 }
\DoxyCodeLine{557 }
\DoxyCodeLine{558    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}    bReuseEmptyNodes;     \textcolor{comment}{// Reuese empty MDX nodes when all keys deleted?}}
\DoxyCodeLine{559                                    \textcolor{comment}{// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file}}
\DoxyCodeLine{560                                    \textcolor{comment}{// Codebase 6.x reuses empty nodes.}}
\DoxyCodeLine{561                                    \textcolor{comment}{// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.}}
\DoxyCodeLine{562 }
\DoxyCodeLine{563 }
\DoxyCodeLine{564  \textcolor{keyword}{private}:}
\DoxyCodeLine{565    xbInt16  AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
\DoxyCodeLine{566    \textcolor{keywordtype}{void}     AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
\DoxyCodeLine{567    xbUInt32 BlockToPage( xbUInt32 ulBlockNo );}
\DoxyCodeLine{568    xbMdxTag *ClearTagTable();}
\DoxyCodeLine{569    xbInt16  DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );}
\DoxyCodeLine{570    xbInt16  GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
\DoxyCodeLine{571    xbInt16  GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
\DoxyCodeLine{572    xbInt16  GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
\DoxyCodeLine{573    xbInt16  HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHarvestRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
\DoxyCodeLine{574    \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}   IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
\DoxyCodeLine{575    xbInt16  KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );}
\DoxyCodeLine{576    xbInt16  KeySetPosDel( xbMdxTag *mpTag );}
\DoxyCodeLine{577    xbInt16  LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );}
\DoxyCodeLine{578    xbUInt32 PageToBlock( xbUInt32 ulPageNo );}
\DoxyCodeLine{579    xbInt16  TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );}
\DoxyCodeLine{580    xbInt16  UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );}
\DoxyCodeLine{581 }
\DoxyCodeLine{582 \textcolor{preprocessor}{   \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{583    xbInt16  PrintKey( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, \textcolor{keywordtype}{char} cType, xbInt16 iOutputOpt );}
\DoxyCodeLine{584 \textcolor{preprocessor}{   \#endif}}
\DoxyCodeLine{585 }
\DoxyCodeLine{586 }
\DoxyCodeLine{587     \};}
\DoxyCodeLine{588 \textcolor{preprocessor}{   \#endif   }\textcolor{comment}{/* XB\_MDX\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{589 }
\DoxyCodeLine{590 }
\DoxyCodeLine{591 \textcolor{preprocessor}{\#ifdef XB\_TDX\_SUPPORT}}
\DoxyCodeLine{592 }
\DoxyCodeLine{593 \textcolor{keyword}{class }XBDLLEXPORT xbIxTdx : \textcolor{keyword}{public} xbIxMdx \{}
\DoxyCodeLine{594  \textcolor{keyword}{public}:}
\DoxyCodeLine{595    xbIxTdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
\DoxyCodeLine{596    \string~xbIxTdx();}
\DoxyCodeLine{597 }
\DoxyCodeLine{598    xbInt16  CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
\DoxyCodeLine{599 }
\DoxyCodeLine{600  \textcolor{keyword}{protected}:}
\DoxyCodeLine{601    \textcolor{keyword}{friend}   \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{602    xbInt16  Close();}
\DoxyCodeLine{603    xbInt16  DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
\DoxyCodeLine{604 }
\DoxyCodeLine{605  \textcolor{keyword}{private}:}
\DoxyCodeLine{606 \};}
\DoxyCodeLine{607 }
\DoxyCodeLine{608 \textcolor{preprocessor}{\#endif   }\textcolor{comment}{/* XB\_TDX\_SUPPORT  */}\textcolor{preprocessor}{}}
\DoxyCodeLine{609 }
\DoxyCodeLine{610 }
\DoxyCodeLine{611   \}         \textcolor{comment}{/* namespace xb     */}}
\DoxyCodeLine{612 \textcolor{preprocessor}{ \#endif     }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{613 \textcolor{preprocessor}{\#endif      }\textcolor{comment}{/* \_\_XB\_INDEX\_H\_\_   */}\textcolor{preprocessor}{}}

\end{DoxyCode}