Ejemplo n.º 1
0
void hmap_insert(HMAP_PTR map, char *key) {

  if(hmap_contains(map, key))
	return;
  hmap_set(map, key, NULL);

}
Ejemplo n.º 2
0
 /* 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;
  }
}