50 #if defined(_MGNCSCTRL_TEXTEDITOR) || (defined(_MGCTRL_TEXTEDIT) && defined(_MGCTRL_TEXTEDIT_USE_NEW_IMPL))
55 #define BTREE_ERRNO_SCHILD 1
56 #define BTREE_ERRNO_SNEXT 0
57 #define BTREE_ERRNO_SNULL -1
59 DECLARE_OBJECT(mCommBTreeNode)
60 DECLARE_OBJECT(mCommBTree)
61 DECLARE_OBJECT(mCommBTreeLeafIterator)
63 #define mCommBTreeLeafIteratorHeader(Clss) \
66 mCommBTreeNode *current;
68 #define mCommBTreeLeafIteratorClassHeader(Clss, Super)\
69 mObjectClassHeader(Clss, Super) \
70 mCommBTreeNode* (*getCurrent)(Clss *self); \
71 BOOL (*hasNext)(Clss *self); \
72 mCommBTreeNode* (*next)(Clss *self); \
73 void (*remove)(Clss *self); \
74 void (*insert)(Clss *self, mCommBTreeNode *leaf);
77 #define mCommBTreeNodeHeader(Clss) \
82 unsigned int level:16; \
84 unsigned int numChildren:16; \
86 unsigned int numLeaves;
89 #define mCommBTreeNodeClassHeader(Clss, Super) \
90 mObjectClassHeader(Clss, Super) \
91 void (*resetKey)(Clss *self); \
92 int (*compareNode)(Clss *self, void *cmpInfo); \
93 void (*recompute)(Clss *self, Clss *child); \
94 void (*changeKey)(Clss *self, void *diffInfo, int deltaChild); \
95 BOOL (*isNullKey)(Clss *self);
97 #define mCommBTreeHeader(Clss) \
99 mCommBTreeNode *rootNode; \
100 int minChildrenNum; \
101 int maxChildrenNum; \
104 #define mCommBTreeClassHeader(Clss, Super) \
105 mObjectClassHeader(Clss, Super) \
106 void (*ref)(Clss *self); \
107 void (*unref)(Clss *self); \
108 mCommBTreeNode* (*getRoot)(Clss *self); \
109 void (*rebalanceNode)(Clss *self, mCommBTreeNode *node); \
110 void (*recomputeNodeInfo)(Clss *self, mCommBTreeNode *node); \
111 void (*deleteNode)(Clss *self, mCommBTreeNode *node); \
112 BOOL (*insertLeaf)(Clss *self, mCommBTreeNode *parent, \
113 mCommBTreeNode *sibLeaf, mCommBTreeNode *leaf); \
114 mCommBTreeNode* (*search)(Clss *self, void* searchInfo, int flags); \
115 mCommBTreeNode* (*newNode)(Clss *self); \
116 mCommBTreeNode* (*newLeaf)(Clss *self);
120 BTSF_RETLAST_IF_OUTOFRANGE = 0x1
123 DEFINE_OBJECT(mCommBTreeNode,
mObject)
124 DEFINE_OBJECT(mCommBTree,
mObject)
125 DEFINE_OBJECT(mCommBTreeLeafIterator,
mObject)
127 #endif //_MGHAVE_NEWTEXTEDIT || _MGNCSCTRL_TEXTEDITOR