Xbase64 Class Library
3.1.2
Main Page
Classes
Files
File List
File Members
xbase64
xbcdx.h
Go to the documentation of this file.
1
#ifndef cdx_h
2
#define cdx_h
3
4
#include "
xbmindex.h
"
5
6
struct
CdxHeader
7
{
8
xbLong
rootNode
;
9
xbLong
freeNode
;
10
xbLong
reserved
;
11
xbShort
keyLen
;
12
union
cdxFeatures
13
{
14
struct
Features
15
{
16
bool
unique
:1;
17
int
:2;
18
bool
hasFor
:1;
19
bool
:1;
20
bool
cdxHeader
:1;
21
bool
cdxFmt
:1;
22
bool
cdxTagHeader
:1;
23
}
features
;
24
char
feature
;
25
}
features
;
26
char
signature
;
27
xbLong
reserved1
[5];
28
char
reserved2
[466];
29
xbShort
descending
;
30
xbShort
totalExprLen
;
31
xbShort
forExprLen
;
32
xbShort
reserved4
;
33
xbShort
keyExprLen
;
34
char
keyforBuffer
[512];
35
};
36
37
struct
CdxNode
38
{
39
xbShort
attr
;
40
xbShort
keyCount
;
41
xbLong
leftSibling
;
42
xbLong
rightSibling
;
43
}
44
#ifdef __GNU LesserC__
45
__attribute__((packed))
46
#endif
47
;
48
49
struct
CdxInnerNode
:
public
CdxNode
50
{
51
char
keys
[500];
52
}
53
#ifdef __GNU_LesserC__
54
__attribute__((packed))
55
#endif
56
;
57
58
struct
CdxLeafNode
:
public
CdxNode
59
{
60
xbShort
freeSpace
;
61
xbLong
recNumberMask
;
62
char
dupByteCounterMask
;
63
char
tailByteCounterMask
;
64
char
recBitUsing
;
65
char
dupBitUsing
;
66
char
tailBitUsing
;
67
char
byteCount
;
68
char
keys
[488];
69
}
70
#ifdef __GNU_LesserC__
71
__attribute__((packed))
72
#endif
73
;
74
75
class
XBDLLEXPORT
xbCdx
:
public
xbMultiIndex
76
{
77
public
:
78
// xbCdx() {} I don't like to make empty object with no protection
79
// to method method call. And I don't see any need of it.
80
xbCdx
(
xbDbf
* dbf):
xbMultiIndex
(dbf)
81
{
82
memset(&indexHeader_, 0,
sizeof
(indexHeader_));
83
memset(&tagHeader_, 0,
sizeof
(tagHeader_));
84
}
85
86
virtual
~xbCdx
() {
CloseIndex
();}
87
88
virtual
xbShort
CreateIndex
(
const
char
*filename,
const
char
*expr,
89
xbShort
unique,
xbShort
overwrite);
90
virtual
xbShort
CreateIndex
(
const
char
*filename,
const
char
* tagname,
91
const
char
*expr,
xbShort
unique,
xbShort
overwrite);
92
93
virtual
xbShort
AddTag(
const
char
* tagname,
const
char
*expr,
94
xbShort
unique,
xbShort
overwrite) {
return
0;}
95
96
virtual
xbLong
GetTotalNodes
() {
return
0;}
97
virtual
xbULong
GetCurDbfRec
() {
return
0;}
98
virtual
xbShort
CreateKey
(
xbShort
,
xbShort
) {
return
0;}
99
virtual
xbShort
GetCurrentKey
(
char
*key) {
return
0;}
100
virtual
xbShort
AddKey
(
xbLong
) {
return
0;}
101
virtual
xbShort
UniqueIndex
() {
return
0;}
102
virtual
xbShort
DeleteKey
(
xbLong
) {
return
0;}
103
virtual
xbShort
KeyWasChanged
() {
return
0;}
104
virtual
xbShort
FindKey
(
const
char
* ) {
return
0;}
105
virtual
xbShort
FindKey
() {
return
0;}
106
virtual
xbShort
FindKey
(
xbDouble
) {
return
0;}
107
virtual
xbShort
GetNextKey
() {
return
0;}
108
virtual
xbShort
GetLastKey
() {
return
0;}
109
virtual
xbShort
GetFirstKey
() {
return
0;}
110
virtual
xbShort
GetPrevKey
() {
return
0;}
111
virtual
xbShort
ReIndex
(
void
(*statusFunc)(
xbLong
itemNum,
xbLong
numItems) = 0) {
return
0;}
112
virtual
xbShort
KeyExists
(
xbDouble
) {
return
0;}
113
virtual
void
GetExpression
(
char
*buf,
int
len) {}
114
#ifdef XBASE_DEBUG
115
virtual
void
DumpHdrNode(
xbShort
Option ) {};
116
virtual
void
DumpNodeRec(
xbLong
) {};
117
virtual
void
DumpNodeChain() {};
118
virtual
xbShort
CheckIndexIntegrity(
xbShort
) {
return
0;};
119
#endif
120
121
// static xbString CreateIndexName(const xbString& dbfName);
122
virtual
const
char
*
GetExtWithDot
(
bool
lower);
123
const
CdxHeader
&
GetIndexHeader
() {
return
indexHeader_;}
124
const
CdxHeader
&
GetTagHeader
() {
return
tagHeader_;}
125
126
protected
:
127
virtual
xbShort
GetHeadNode
();
128
virtual
xbUShort
GetKeyLen
() {
return
0;}
129
virtual
const
char
*
GetKeyExpression
() {
return
""
;}
130
virtual
void
FreeNodesMemory
() {}
131
void
ReadTagHeader();
132
xbLong
GetIndexTagOffset
() {
return
0;}
133
void
ReadIndexHeader
(
xbLong
) {}
134
135
private
:
136
xbCdx
(
const
xbCdx
&);
137
xbCdx
& operator=(
const
xbCdx
&);
138
void
WriteTagHeader(
const
char
* tagName);
139
void
WriteTagRoot(
const
char
* tagName);
140
void
WriteIndexHeader(
const
char
* expr);
141
void
WriteIndexRoot();
142
143
private
:
144
CdxHeader
tagHeader_;
145
CdxLeafNode
tagRootNode_;
146
CdxHeader
indexHeader_;
147
CdxLeafNode
indexRootNode_;
148
};
149
150
#endif
Generated on Mon Aug 20 2012 08:44:17 for Xbase64 Class Library by
1.8.1.2