mGNCS API Reference  v1.2.0
A new control set and a new framework for MiniGUI apps
mbtree.h
1 
38 #if defined(_MGNCSCTRL_TEXTEDITOR) || (defined(_MGCTRL_TEXTEDIT) && defined(_MGCTRL_TEXTEDIT_USE_NEW_IMPL))
39 
40 #ifndef _COMM_BTREE_H
41 #define _COMM_BTREE_H
42 
43 #define BTREE_ERRNO_SCHILD 1
44 #define BTREE_ERRNO_SNEXT 0
45 #define BTREE_ERRNO_SNULL -1
46 
47 DECLARE_OBJECT(mCommBTreeNode)
48 DECLARE_OBJECT(mCommBTree)
49 DECLARE_OBJECT(mCommBTreeLeafIterator)
50 
51 #define mCommBTreeLeafIteratorHeader(Clss) \
52  mObjectHeader(Clss) \
53  mCommBTree *tree; \
54  mCommBTreeNode *current;
55 
56 #define mCommBTreeLeafIteratorClassHeader(Clss, Super)\
57  mObjectClassHeader(Clss, Super) \
58  mCommBTreeNode* (*getCurrent)(Clss *self); \
59  BOOL (*hasNext)(Clss *self); \
60  mCommBTreeNode* (*next)(Clss *self); \
61  void (*remove)(Clss *self); \
62  void (*insert)(Clss *self, mCommBTreeNode *leaf);
63 
64 
65 #define mCommBTreeNodeHeader(Clss) \
66  mObjectHeader(Clss) \
67  Clss *parent; \
68  Clss *next; \
69  Clss *children; \
70  unsigned int level:16; \
71  /* Number of children of this node. */ \
72  unsigned int numChildren:16; \
73  /* Total number of leaves in the subtree rooted here. */\
74  unsigned int numLeaves;
75 
76 
77 #define mCommBTreeNodeClassHeader(Clss, Super) \
78  mObjectClassHeader(Clss, Super) \
79  void (*resetKey)(Clss *self); \
80  int (*compareNode)(Clss *self, void *cmpInfo); \
81  void (*recompute)(Clss *self, Clss *child); \
82  void (*changeKey)(Clss *self, void *diffInfo, int deltaChild); \
83  BOOL (*isNullKey)(Clss *self);
84 
85 #define mCommBTreeHeader(Clss) \
86  mObjectHeader(Clss) \
87  mCommBTreeNode *rootNode; \
88  int minChildrenNum; \
89  int maxChildrenNum; \
90  int refCount;
91 
92 #define mCommBTreeClassHeader(Clss, Super) \
93  mObjectClassHeader(Clss, Super) \
94  void (*ref)(Clss *self); \
95  void (*unref)(Clss *self); \
96  mCommBTreeNode* (*getRoot)(Clss *self); \
97  void (*rebalanceNode)(Clss *self, mCommBTreeNode *node); \
98  void (*recomputeNodeInfo)(Clss *self, mCommBTreeNode *node); \
99  void (*deleteNode)(Clss *self, mCommBTreeNode *node); \
100  BOOL (*insertLeaf)(Clss *self, mCommBTreeNode *parent, \
101  mCommBTreeNode *sibLeaf, mCommBTreeNode *leaf); \
102  mCommBTreeNode* (*search)(Clss *self, void* searchInfo, int flags); \
103  mCommBTreeNode* (*newNode)(Clss *self); \
104  mCommBTreeNode* (*newLeaf)(Clss *self);
105 
106 //search flags
107 enum {
108  BTSF_RETLAST_IF_OUTOFRANGE = 0x1
109 };
110 
111 DEFINE_OBJECT(mCommBTreeNode, mObject)
112 DEFINE_OBJECT(mCommBTree, mObject)
113 DEFINE_OBJECT(mCommBTreeLeafIterator, mObject)
114 #endif
115 #endif //_MGHAVE_NEWTEXTEDIT || _MGNCSCTRL_TEXTEDITOR
the Object struct