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