/*---------------------------------------------------------------------*//**
	ツリーの作成

	@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;
}
Beispiel #5
0
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]);
	}
}