static void print_rc(wtreeNode_t* parent, int depth) { if (!parent) return; print_rc(parent->right, depth + 1); print_tab(depth); PRINT("Node@%lx (bottom : %lx / base :%lx) {size : %u / base_size : %u / top : %lx} (%d)\n", (uint64_t) parent, (uint64_t)parent->top - parent->size, (uint64_t)parent->top - parent->base_size, parent->size, parent->base_size, (uint64_t) parent->top, depth); print_rc(parent->left, depth + 1); }
int analyse ( Slice *psl, Replica *prep, int len, int state_index) { int i,initial_state,final_state; initial_state=in_state(&psl[0]); final_state=in_state(&psl[len-1]); if (initial_state==state_index) { if (final_state==state_index) { for (i=0;i<len;i++) { if (in_upper_window(&psl[i], prep,state_index)){ return 1; } } //printf("path did not reach lambda %g\n",prep->lambda); //print_rc(&psl[0],state_index); //print_rc(&psl[len-1],state_index); return 0; } else { if (final_state==0) { printf("final state unknown\n"); print_rc(&psl[0],state_index); print_rc(&psl[len-1],state_index); return 0; } for (i=0;i<len;i++) { if (in_upper_window(&psl[i], prep,state_index)) { //printf("intermediate slice %d is larger than lambda %g \n",i,prep->lambda); return 2; } } //printf("warning: type 2 but path did not reach lambda\n"); //dprint(initial_state); //dprint(final_state); //dprint(path.current_replica); //for(i=0; i<prep->pathlen; i++) { // print_rc(&(trial[i]),state_index); // } return 0; } } printf("analyse: path of length %d corrupted in replica %d, initial %d final %d, state index %d \n",len, prep->index,initial_state,final_state,state_index); print_rc(&psl[0],state_index); print_rc(&psl[len-1],state_index); return 0; }
int analyse_state_i(Slice *psl, Replica *prep, int len, int state_index) { int i,visitedA,visited2; visitedA=visited2 =0; if (in_upper_window(&psl[0], prep,state_index)){ for (i=1;i<len;i++) { if (in_state(&psl[i])==state_index){ visitedA =1; } if ((visitedA) && (in_upper_window(&psl[i], prep,state_index))) { visited2 =1; } } if ((visitedA) && (in_upper_window(&psl[len-1], prep,state_index))){ //printf("path OK\n"); return 1; } if ((visitedA) && (visited2) ) { printf ("path starts in 1, visits A and then 1 but doesn't end in 1\n"); return 1; } } for(i=0;i<prep->pathlen;i++) { print_rc(&slice[i],state_index); printf(" lambda = %g ",prep->lambda ); dprint(in_state(&slice[i])); } printf("analyse i: path corrupted in replica %d \n",prep->index); dprint(path.initial_state); return 0; }
void wtree_print(wtreeRoot_t* root) { if(!root) return; if(!root->entry) return; printf("\n"); print_rc(root->entry, 0); printf("\n"); }
/* handle <sport> <target week(s)> <algorithms> argument chain */ static int parse_rc_args(struct rc *rc, int argc, char **argv) { int err; const char *sport; struct week_id begin_date, end_date; struct list algorithm_list; /* make sure there are enough arguments */ if (argc < 3) { fprintf(stderr, "%s: command requires three arguments (sport, target week(s), and algorithms)\n", progname); return -1; } /* the first argument is sport; just copy it */ sport = strdup(argv[0]); /* parse action range */ err = parse_week_range(argv[1], &begin_date, &end_date); if (err) return -2; /* if not a range, set end = begin */ if (end_date.year == WEEK_ID_NONE) end_date = begin_date; /* parse algortihm list */ list_init(&algorithm_list); err = parse_algorithms(argv[2], &algorithm_list); if (err) return -2; /* update rc */ rc->sport = strdup(sport); rc->target_begin = begin_date; rc->target_end = end_date; rc->user_algorithms = algorithm_list; /* fix data ranges for action dates */ err = update_data_range(rc); if (err) return -3; /* make sure it is valid */ if (!validate_rc(rc)) return -4; if (verbose) print_rc(rc); return 0; }
int shoot_oneway(Replica *prep) { int i,j,index,len,pathlen,maxlength,trial_pathlen,type; int initial_state,final_state; if (prep->index==0) { return 0; } //do not want to keep minus interface statistics for shooting path.block_stats[path.initial_state-1][prep->index].mcacc[0].tries++; index =0; for (i=0;i<path.nslices;i++) { if (in_upper_window(&slice[i], prep, path.initial_state)) { index = i; i = path.nslices; } } //sanity check if (in_upper_window(&slice[index], prep, path.initial_state)==0) { return 0; } for(i=0;i<=index;i++) { trial[i]=slice[i]; } maxlength= MAXSLICES-index; len = trajectory(&trial[index],maxlength); if (len==0) { printf("Shoot oneway: trajectory too long. State %d\n",path.initial_state); return 0; } trial_pathlen = index+len+1; if(trial_pathlen<3) { printf("path is too short: %d, state %d\n",trial_pathlen,path.initial_state); for(i=0; i<path.nslices; i++) { print_rc(&slice[i],path.initial_state); } return 0; } type = analyse(trial,prep,trial_pathlen, path.initial_state); if ( type==0 ) { printf("Shoot Oneway: wrong type after shooting.\n"); dprint(path.initial_state); initial_state = in_state(&(trial[0])); gprint(trial[0].energy); dprint(initial_state); dprint(final_state); dprint(prep->index); return 0; } for(i=index+1;i<trial_pathlen;i++) { slice[i] = trial[i]; } final_state=in_state(&slice[trial_pathlen-1]); path.final_state = final_state; prep->pathlen= trial_pathlen; path.nslices = trial_pathlen; prep->type =type; path.block_stats[path.initial_state-1][prep->index].mcacc[0].acc++; return 1; }