bool readForest(const char * filename, Forest *forest)
{
	FILE *pFile;
	int i,j;
	int treeNodeNum;
	int treeIdx = 0;
	TreeNode a;

	printf("%s\n",filename);
	pFile = fopen(filename, "r");

	if(pFile == NULL) {
		return false;
	}

	//scan
	treeIdx = 0;
	treeNodeNum = 0;
	readOneNode( pFile, &a, treeNodeNum);
	treeNodeNum += 1;
	while(readOneNode( pFile, &a, treeNodeNum)) {
		if( a.parent == -1) {
			forest->forest[treeIdx].nodeArray = (TreeNode*)malloc( treeNodeNum*sizeof(TreeNode));
			forest->forest[treeIdx].numOfNodes = treeNodeNum;
			treeNodeNum = 0;
			treeIdx ++;
		}
		treeNodeNum += 1;
	}
	printf("%d\t%d\n",treeNodeNum,treeIdx);
	forest->forest[treeIdx].nodeArray = (TreeNode*)malloc( treeNodeNum*sizeof(TreeNode));
	printf("%d\t%d\n",forest->forest[treeIdx].numOfNodes,treeIdx);
	forest->forest[treeIdx].numOfNodes = treeNodeNum;
	printf("%d\t%d\n",forest->forest[treeIdx].numOfNodes,treeIdx);

	//read data
	rewind(pFile);
	treeIdx = 0;
	treeNodeNum = 0;
	for (i=0;i<NUM_OF_TREES;i++) {
		for (j=0;j<forest->forest[i].numOfNodes;j++) {
			readOneNode( pFile, &a, treeNodeNum);
			copyOneNode(&(forest->forest[i].nodeArray[j]), &a);
		}
	}
	
	fclose(pFile);
	return true;
}
Example #2
0
void
MPTreeMgr::readNodeList( ifstream & input )
{
	string temp;
	Token token;

	token.reserve( 8 );
	while ( getline( input , temp ) ) {
		if ( !token.empty() ) token.clear();
		Nz_ParseToken( temp , token );
		if ( token.empty() ) continue;
		if ( isNode( token ) ) readOneNode( token );
		if ( isTerm( token ) ) readOneTerm( token );
	}
}