/*---------------------------------------------------------------------*//** ツリーの作成 @retval true 成功 @retval false 失敗 **//*---------------------------------------------------------------------*/ void Menu::makeTree(TreeNode<MenuTreeNode>* tnodeDst, bool isDiveChild, const XmlNode* xnodeSrc) { const XmlNode* xnodeSrcChild = xnodeSrc->getChildNode(); if(xnodeSrcChild != 0L) { addTreeNode(tnodeDst, true, xnodeSrcChild); } const XmlNode* xnodeSrcSibling = xnodeSrc->getSiblingNode(); if(xnodeSrcSibling != 0L) { addTreeNode(tnodeDst, isDiveChild, xnodeSrcSibling); } }
// a simple method to add a new node. void addTreeNodeByUser(TreeNode* root,ElementType element,ElementType parent_element,char mark){ TreeNode* parent = find(root,parent_element); if(!parent){ return; } addTreeNode(element,parent,mark); }
TreeNode * addTreeNode( TreeNode * p, char * s) { if(p == NULL){ p = talloc(); p->word = strdup(s); p->count = 1; p-> left = NULL; p-> right = NULL; return p; } else{ int compare = strcmp(s, p->word); if(compare == 0){ ++(p->count); }else if(compare < 0){ p->left = addTreeNode(p->left, s); }else{ p-> right = addTreeNode(p->right, s); } } return p; }
bool Menu::createFromXml(FileBase* fileXml, MenuFuncTable* functblRef, MenuPanelFactory* pnlfctryRef, void* objCreateParam) { // XML ファイルをバッファに読み込む VcString bufFile; while(true) { const int SIZE_BUF = 100 * 1024; char buf[SIZE_BUF]; int sizeRead = fileXml->read(buf, SIZE_BUF); bufFile.add(buf, sizeRead); if(sizeRead < SIZE_BUF) { break; } } CMXML_TRACE(VcString::format("{Menu::createFromXml} menu xml : size=%d\n", bufFile.getLength())); // XML を解析する XmlParser xmlparser; xmlparser.parseXmlDocument(&bufFile); CMXML_TRACE("{Menu::createFromXml} XmlParser::parseXmlDocument end.\n"); // ツリーを作成する _tree = new Tree<MenuTreeNode>(true); addTreeNode(_tree->addRootNode(), true, xmlparser.getRootNode()); #if defined(_DEBUG) TRACE("{Menu::createFromXml} menu hierarchy\n"); for(TreeIterator<MenuTreeNode> it = _tree->iterator(); it.has(); it.next()) { if(it.object() != 0L) { for(int i = 0; i < it.getDepth(); i++) { CMXML_TRACE(" "); } CMXML_TRACE( *it.object()->getName() + "\n" ); } } #endif // ファンクションテーブルを保存する _functblRef = functblRef; // パネルファクトリを保存する _pnlfctryRef = pnlfctryRef; // パラメータオブジェクトを保存する _objCreateParamRef = objCreateParam; return true; }
int main() { q list; list.front = 0; list.rear = 0; n *root; int i; for(i=0;i<31;i++) { addTreeNode(&root, &list, 1); } printf("::%x\n", root->leftc->leftc); printf("::%x\n", root->leftc->rightc); printf("\n\n"); for(i = list.front;i<list.rear;i++) { printf("%x\t", list.list[i]); } }