From c894a7cdd8686ea695602a23a511a3f1b0d047be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= <debian@jff-webhosting.net>
Date: Mon, 14 Aug 2023 21:07:46 +0200
Subject: New upstream version 4.1.4

---
 docs/doxygen/latex/xbindex_8h_source.tex | 521 +++++++++++++++++++++++++++++++
 1 file changed, 521 insertions(+)
 create mode 100644 docs/doxygen/latex/xbindex_8h_source.tex

(limited to 'docs/doxygen/latex/xbindex_8h_source.tex')

diff --git a/docs/doxygen/latex/xbindex_8h_source.tex b/docs/doxygen/latex/xbindex_8h_source.tex
new file mode 100644
index 0000000..1572730
--- /dev/null
+++ b/docs/doxygen/latex/xbindex_8h_source.tex
@@ -0,0 +1,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}
-- 
cgit v1.2.3

