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 
6 struct CdxHeader
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;
22  bool cdxTagHeader:1;
23  } features;
24  char feature;
25  } features;
26  char signature;
28  char reserved2[466];
34  char keyforBuffer[512];
35 };
36 
37 struct CdxNode
38 {
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 {
67  char byteCount;
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.
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;}
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
char dupBitUsing
Definition: xbcdx.h:65
const CdxHeader & GetTagHeader()
Definition: xbcdx.h:124
xbLong rightSibling
Definition: xbcdx.h:42
xbShort keyExprLen
Definition: xbcdx.h:33
xbShort keyLen
Definition: xbcdx.h:11
virtual void GetExpression(char *buf, int len)
Definition: xbcdx.h:113
xbShort keyCount
Definition: xbcdx.h:40
virtual xbShort KeyExists(xbDouble)
Definition: xbcdx.h:112
virtual const char * GetExtWithDot(bool lower)=0
xbLong freeNode
Definition: xbcdx.h:9
Definition: xbcdx.h:75
bool cdxTagHeader
Definition: xbcdx.h:22
virtual xbShort FindKey()
Definition: xbcdx.h:105
#define XBDLLEXPORT
Definition: xbase64.h:87
xbShort freeSpace
Definition: xbcdx.h:60
virtual xbShort GetPrevKey()
Definition: xbcdx.h:110
long xbLong
Definition: xbtypes.h:61
virtual const char * GetKeyExpression()
Definition: xbcdx.h:129
Definition: xbcdx.h:49
char keys[500]
Definition: xbcdx.h:51
short int xbShort
xbShort type
Definition: xbtypes.h:60
virtual xbShort UniqueIndex()
Definition: xbcdx.h:101
virtual xbShort FindKey(xbDouble)
Definition: xbcdx.h:106
char recBitUsing
Definition: xbcdx.h:64
xbLong reserved1[5]
Definition: xbcdx.h:27
unsigned long int xbULong
xbULong type
Definition: xbtypes.h:50
double xbDouble
xbDouble type
Definition: xbtypes.h:73
virtual xbShort GetNextKey()
Definition: xbcdx.h:107
virtual ~xbCdx()
Definition: xbcdx.h:86
virtual xbShort DeleteKey(xbLong)
Definition: xbcdx.h:102
xbCdx(xbDbf *dbf)
Definition: xbcdx.h:80
virtual xbShort AddKey(xbLong)
Definition: xbcdx.h:100
xbShort forExprLen
Definition: xbcdx.h:31
virtual xbUShort GetKeyLen()
Definition: xbcdx.h:128
Definition: xbcdx.h:14
unsigned short int xbUShort
xbUShort type
Definition: xbtypes.h:55
struct CdxHeader::cdxFeatures::Features features
xbLong leftSibling
Definition: xbcdx.h:41
char tailByteCounterMask
Definition: xbcdx.h:63
virtual xbShort GetFirstKey()
Definition: xbcdx.h:109
bool unique
Definition: xbcdx.h:16
virtual xbShort GetCurrentKey(char *key)
Definition: xbcdx.h:99
Definition: xbcdx.h:58
virtual xbShort CreateIndex(const char *filename, const char *tag, const char *expr, xbShort unique, xbShort overwrite)=0
xbShort attr
Definition: xbcdx.h:39
const CdxHeader & GetIndexHeader()
Definition: xbcdx.h:123
virtual xbShort CreateKey(xbShort, xbShort)
Definition: xbcdx.h:98
char reserved2[466]
Definition: xbcdx.h:28
void ReadIndexHeader(xbLong)
Definition: xbcdx.h:133
Definition: xbcdx.h:12
char tailBitUsing
Definition: xbcdx.h:66
xbShort CloseIndex()
xbLong GetIndexTagOffset()
Definition: xbcdx.h:132
xbShort descending
Definition: xbcdx.h:29
Definition: xbcdx.h:6
virtual xbShort KeyWasChanged()
Definition: xbcdx.h:103
char keys[488]
Definition: xbcdx.h:68
char dupByteCounterMask
Definition: xbcdx.h:62
virtual void FreeNodesMemory()
Definition: xbcdx.h:130
bool cdxHeader
Definition: xbcdx.h:20
bool hasFor
Definition: xbcdx.h:18
char signature
Definition: xbcdx.h:26
char byteCount
Definition: xbcdx.h:67
xbLong reserved
Definition: xbcdx.h:10
char feature
Definition: xbcdx.h:24
xbShort reserved4
Definition: xbcdx.h:32
xbShort totalExprLen
Definition: xbcdx.h:30
virtual xbShort FindKey(const char *)
Definition: xbcdx.h:104
xbMH struct
Definition: xbdbf.h:190
virtual xbULong GetCurDbfRec()
Definition: xbcdx.h:97
Definition: xbmindex.h:6
xbLong rootNode
Definition: xbcdx.h:8
virtual xbLong GetTotalNodes()
Definition: xbcdx.h:96
Definition: xbcdx.h:37
virtual xbShort GetLastKey()
Definition: xbcdx.h:108
xbLong recNumberMask
Definition: xbcdx.h:61
virtual xbShort GetHeadNode()=0
bool cdxFmt
Definition: xbcdx.h:21
char keyforBuffer[512]
Definition: xbcdx.h:34
virtual xbShort ReIndex(void(*statusFunc)(xbLong itemNum, xbLong numItems)=0)
Definition: xbcdx.h:111
union CdxHeader::cdxFeatures features
virtual xbShort AddTag(const char *tagname, const char *expr, xbShort unique, xbShort overwrite)
Definition: xbcdx.h:93