void hmap_insert(HMAP_PTR map, char *key) { if(hmap_contains(map, key)) return; hmap_set(map, key, NULL); }
/* param: char*, filename * param: Agg_Data * func: Do a DFS starting at char* * flag vlaues: * 0: not discovered on current search * 1: discovered (but not done)( to find cycles) * 2: finished (so that cross edges can still use finished nodes * ret: * 0: no bad edge (good) * 1: has bad edge (bad) */ int has_bad_edge( char* filename, HMAP_PTR hmap, Fdata* files, int numFData){ //printf("filename:%s:\n", filename); if( hmap_contains( hmap, filename) ){ Fdata Curfile = hmap_get( hmap, filename); Curfile->flag = 1; int i; for( i=0; i<Curfile->numDepends; ++i){ //for every dependency // printf("CHECKING DEPEND:%s:\n", Curfile->dependsOn[i]); Fdata depends = (Fdata)hmap_get( hmap, (Curfile->dependsOn)[i] ); if(depends->flag == 1) return 1; //back edge if( has_bad_edge( (Curfile->dependsOn)[i], hmap, files, numFData) ) return 1; } Curfile->flag = 2; return 0; } else{ //file never existed fprintf(stderr, "ERROR, file doesn't exist\n"); return 1; } }