Exemple #1
0
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; 
}
Exemple #4
0
void wtree_print(wtreeRoot_t* root) {
	if(!root)
		return;
	if(!root->entry)
		return;
	printf("\n");
	print_rc(root->entry, 0);
	printf("\n");
}
Exemple #5
0
/* 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;
}