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; }
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 ); } }