mGNCS API Reference  v1.5.0
A new control set and a new framework for MiniGUI apps
mbtree.h
1 //
3 // IMPORTANT NOTICE
4 //
5 // The following open source license statement does not apply to any
6 // entity in the Exception List published by FMSoft.
7 //
8 // For more information, please visit:
9 //
10 // https://www.fmsoft.cn/exception-list
11 //
13 
50 #if defined(_MGNCSCTRL_TEXTEDITOR) || (defined(_MGCTRL_TEXTEDIT) && defined(_MGCTRL_TEXTEDIT_USE_NEW_IMPL))
51 
52 #ifndef _COMM_BTREE_H
53 #define _COMM_BTREE_H
54 
55 #define BTREE_ERRNO_SCHILD 1
56 #define BTREE_ERRNO_SNEXT 0
57 #define BTREE_ERRNO_SNULL -1
58 
59 DECLARE_OBJECT(mCommBTreeNode)
60 DECLARE_OBJECT(mCommBTree)
61 DECLARE_OBJECT(mCommBTreeLeafIterator)
62 
63 #define mCommBTreeLeafIteratorHeader(Clss) \
64  mObjectHeader(Clss) \
65  mCommBTree *tree; \
66  mCommBTreeNode *current;
67 
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);
75 
76 
77 #define mCommBTreeNodeHeader(Clss) \
78  mObjectHeader(Clss) \
79  Clss *parent; \
80  Clss *next; \
81  Clss *children; \
82  unsigned int level:16; \
83  /* Number of children of this node. */ \
84  unsigned int numChildren:16; \
85  /* Total number of leaves in the subtree rooted here. */\
86  unsigned int numLeaves;
87 
88 
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);
96 
97 #define mCommBTreeHeader(Clss) \
98  mObjectHeader(Clss) \
99  mCommBTreeNode *rootNode; \
100  int minChildrenNum; \
101  int maxChildrenNum; \
102  int refCount;
103 
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);
117 
118 //search flags
119 enum {
120  BTSF_RETLAST_IF_OUTOFRANGE = 0x1
121 };
122 
123 DEFINE_OBJECT(mCommBTreeNode, mObject)
124 DEFINE_OBJECT(mCommBTree, mObject)
125 DEFINE_OBJECT(mCommBTreeLeafIterator, mObject)
126 #endif
127 #endif //_MGHAVE_NEWTEXTEDIT || _MGNCSCTRL_TEXTEDITOR
mObject
the Object struct