\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}
