Пример #1
0
/*
 * Function:  exec_tree
 * --------------------
 * Run the program tree
 * n_array: an array of all the nodes
 */
void exec_tree(struct node* n_array) {
    int i;
    int size = 0;
    int *d_eligible = determine_eligible(n_array, &size);
  
    while(size != 0) {
    	for(i=0; i<size; i++) {
            int eligible_index = d_eligible[i];
            if(n_array[eligible_index].status != FINISHED) {
                run(n_array, d_eligible[i]);
            }
        }
        size = 0;
        d_eligible = determine_eligible(n_array, &size);
    }
}
Пример #2
0
Файл: main.c Проект: DarylX/4061
int main(int argc, const char * argv[]) {
	char filename[MAX_LENGTH];
	node_t * nodes[MAX_NODES];
	FILE * file;
	int count;
	int i;

    //check that there is correct number of arguments
	if (argc != 2) {
		printf("graphexec requires 2 arguments.\n");
        return -1;
    }
    
    //open file and check that it was sucessful
	file = fopen(argv[1], "r");
	if (!file) {
		printf("The file specified does not exist or could not be opened.\n");
	}
    
    //if things check out, proceed to read and process file
    else {
		count = read_file(file, nodes, MAX_NODES);
        bool finished;
        
		while (!finished) {
			finished = true;
			determine_eligible(nodes, count);
            
            //iterate through and run nodes that are marked READY
			for (i = 0; i < count; i++) {
				if (nodes[i]->status != FINISHED) {
					finished = false;
					if (nodes[i]->status == READY) {
						printf("Node %i Status: Running", i);
						if(run_node(nodes[i]) == FINISHED &&
                            run_node(nodes[i]) != -1) {
                            printf(" >> Finished!\n");
                        } else
                            perror("Error running node");
					}
				}
			}
		}
        
		//cleanup
		free_array(nodes, count);
        if (fclose(file) == -1)
            perror("Failed to close file");
	}
    
	return 0;
}
Пример #3
0
// == Update Graph Eligibility ==
// Run through the whole graph and update all nodes whose parents have completed
void update_graph_eligibility(node_t * node_array[], int node_count) {
	int i;
	for (i = 0; i < node_count; i++) {
		determine_eligible(node_array, node_array[i]);
	}
}