Xbase64 Class Library 3.1.2
xbcdx.h
Go to the documentation of this file.
1#ifndef cdx_h
2#define cdx_h
3
4#include "xbmindex.h"
5
7{
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;
24 char feature;
28 char reserved2[466];
34 char keyforBuffer[512];
35};
36
37struct CdxNode
38{
43}
44#ifdef __GNU_LesserC__
45 __attribute__((packed))
46#endif
47;
48
49struct CdxInnerNode: public CdxNode
50{
51 char keys[500];
52}
53#ifdef __GNU_LesserC__
54 __attribute__((packed))
55#endif
56;
57
58struct CdxLeafNode: public CdxNode
59{
68 char keys[488];
69}
70#ifdef __GNU_LesserC__
71 __attribute__((packed))
72#endif
73;
74
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.
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();
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
Definition: xbcdx.h:76
virtual xbShort GetCurrentKey(char *key)
Definition: xbcdx.h:99
virtual xbULong GetCurDbfRec()
Definition: xbcdx.h:97
virtual xbLong GetTotalNodes()
Definition: xbcdx.h:96
virtual xbShort KeyWasChanged()
Definition: xbcdx.h:103
virtual xbShort UniqueIndex()
Definition: xbcdx.h:101
virtual void GetExpression(char *buf, int len)
Definition: xbcdx.h:113
virtual ~xbCdx()
Definition: xbcdx.h:86
virtual xbShort FindKey(xbDouble)
Definition: xbcdx.h:106
virtual xbShort ReIndex(void(*statusFunc)(xbLong itemNum, xbLong numItems)=0)
Definition: xbcdx.h:111
virtual xbShort KeyExists(xbDouble)
Definition: xbcdx.h:112
virtual xbShort GetFirstKey()
Definition: xbcdx.h:109
virtual xbShort DeleteKey(xbLong)
Definition: xbcdx.h:102
virtual xbShort AddTag(const char *tagname, const char *expr, xbShort unique, xbShort overwrite)
Definition: xbcdx.h:93
virtual void FreeNodesMemory()
Definition: xbcdx.h:130
virtual xbShort CreateKey(xbShort, xbShort)
Definition: xbcdx.h:98
xbCdx(xbDbf *dbf)
Definition: xbcdx.h:80
virtual xbShort GetPrevKey()
Definition: xbcdx.h:110
virtual xbShort AddKey(xbLong)
Definition: xbcdx.h:100
virtual xbUShort GetKeyLen()
Definition: xbcdx.h:128
virtual xbShort GetNextKey()
Definition: xbcdx.h:107
const CdxHeader & GetTagHeader()
Definition: xbcdx.h:124
void ReadIndexHeader(xbLong)
Definition: xbcdx.h:133
virtual xbShort GetLastKey()
Definition: xbcdx.h:108
const CdxHeader & GetIndexHeader()
Definition: xbcdx.h:123
virtual const char * GetKeyExpression()
Definition: xbcdx.h:129
xbLong GetIndexTagOffset()
Definition: xbcdx.h:132
virtual xbShort FindKey()
Definition: xbcdx.h:105
virtual xbShort FindKey(const char *)
Definition: xbcdx.h:104
xbMH struct
Definition: xbdbf.h:190
virtual const char * GetExtWithDot(bool lower)=0
xbShort CloseIndex()
virtual xbShort GetHeadNode()=0
Definition: xbmindex.h:7
virtual xbShort CreateIndex(const char *filename, const char *tag, const char *expr, xbShort unique, xbShort overwrite)=0
Definition: xbcdx.h:15
bool cdxTagHeader
Definition: xbcdx.h:22
bool unique
Definition: xbcdx.h:16
bool hasFor
Definition: xbcdx.h:18
bool cdxFmt
Definition: xbcdx.h:21
bool cdxHeader
Definition: xbcdx.h:20
Definition: xbcdx.h:7
xbLong reserved
Definition: xbcdx.h:10
xbLong freeNode
Definition: xbcdx.h:9
char reserved2[466]
Definition: xbcdx.h:28
char keyforBuffer[512]
Definition: xbcdx.h:34
xbShort keyLen
Definition: xbcdx.h:11
char signature
Definition: xbcdx.h:26
xbLong reserved1[5]
Definition: xbcdx.h:27
xbShort forExprLen
Definition: xbcdx.h:31
xbLong rootNode
Definition: xbcdx.h:8
xbShort totalExprLen
Definition: xbcdx.h:30
xbShort reserved4
Definition: xbcdx.h:32
xbShort descending
Definition: xbcdx.h:29
xbShort keyExprLen
Definition: xbcdx.h:33
union CdxHeader::cdxFeatures features
Definition: xbcdx.h:50
char keys[500]
Definition: xbcdx.h:51
Definition: xbcdx.h:59
char tailByteCounterMask
Definition: xbcdx.h:63
char keys[488]
Definition: xbcdx.h:68
char byteCount
Definition: xbcdx.h:67
char tailBitUsing
Definition: xbcdx.h:66
xbShort freeSpace
Definition: xbcdx.h:60
char dupBitUsing
Definition: xbcdx.h:65
char dupByteCounterMask
Definition: xbcdx.h:62
xbLong recNumberMask
Definition: xbcdx.h:61
char recBitUsing
Definition: xbcdx.h:64
Definition: xbcdx.h:38
xbLong rightSibling
Definition: xbcdx.h:42
xbLong leftSibling
Definition: xbcdx.h:41
xbShort attr
Definition: xbcdx.h:39
xbShort keyCount
Definition: xbcdx.h:40
Definition: xbcdx.h:13
struct CdxHeader::cdxFeatures::Features features
char feature
Definition: xbcdx.h:24
#define XBDLLEXPORT
Definition: xbase64.h:86
long xbLong
Definition: xbtypes.h:61
short int xbShort
xbShort type
Definition: xbtypes.h:60
unsigned short int xbUShort
xbUShort type
Definition: xbtypes.h:55
double xbDouble
xbDouble type
Definition: xbtypes.h:73
unsigned long int xbULong
xbULong type
Definition: xbtypes.h:50