Beispiel #1
0
int main(int argc, char const *argv[]) {
    char* read_buf = malloc(READ_BUF_LEN);
    hashmap_t *hm = create_hash_map(HASHMAP_SIZE);

    int result = scanf("%511[a-z|A-Z|']", read_buf);
    int *count;
    while (result != EOF) {
        if (result == 1) {
            to_lower_case(read_buf);

            count = lookup_val(read_buf, hm);
            if (count != NULL) {
                *count = *count + 1;
            } else {
                add_val(read_buf, 1, hm);
            }
        } else if (result == 0) {
            scanf("%511[^a-z|A-Z|']", read_buf);
        }

        result = scanf("%511[a-z|A-Z|']", read_buf);
    }

    node_t **words = to_sorted_array(hm);
    for (int i = 0; i < hm->size; i++) {
        printf("%s %d\n", words[i]->string, words[i]->count);
    }

    return 0;
}
Beispiel #2
0
void print_comp_list(comp_list_t *cl, unsigned short int n){
	if(!cl || !cl->size){
		return;
	}
	unsigned short int * ca = to_sorted_array(cl,n);
	unsigned short int comp_size = cl->size;
	for(unsigned short int i = 0; i < comp_size; i++){
		fprintf(stdout,"%d ",ca[i]);
	}
	free(ca);
	fprintf(stdout,"\n");
	fflush(stdout);
}
Beispiel #3
0
opt_oct_t* opt_oct_add_epsilon_bin(ap_manager_t* man, opt_oct_t* o1, opt_oct_t* o2, 
			   ap_scalar_t* epsilon)
{
  opt_oct_internal_t* pr = opt_oct_init_from_manager(man,AP_FUNID_WIDENING,2);
  opt_oct_t* r;
  if((o1->dim!=o2->dim) || (o1->intdim!=o2->intdim)){
	return NULL;
  }
  if (!o1->closed && !o1->m){
    /* a1 definitely empty */
    r = opt_oct_copy_internal(pr,o2);
  }
  else if (!o2->closed && !o2->m){
    /* a2 definitely empty */
    r = opt_oct_copy_internal(pr,o1);
  }
  else {
    opt_oct_mat_t * oo1 = o1->m ? o1->m : o1->closed;
    opt_oct_mat_t * oo2 = o2->m ? o2->m : o2->closed;
    double *m1 = oo1->mat;
    double *m2 = oo2->mat;
    int size = 2*(o1->dim)*(o1->dim+1);
    size_t i;
    r = opt_oct_alloc_internal(pr,o1->dim,o1->intdim);
    r->m = opt_hmat_alloc(size);
    /* get max abs of non +oo coefs in m2, times epsilon */
    pr->tmp[0] = 0;
    double *mm = r->m->mat;
    free_array_comp_list(r->m->acl);
    if(!oo1->is_dense){
	r->m->is_dense = false;
	r->m->ti = false;
	r->m->acl = copy_array_comp_list(oo1->acl);
	comp_list_t * cl = oo2->acl->head;
	while(cl != NULL){
		unsigned short int * ca = to_sorted_array(cl,o1->dim);
		unsigned short int comp_size = cl->size;
		
		for(int i = 0; i < 2*comp_size; i++){
			unsigned short int i1 = (i%2==0)? 2*ca[i/2] : 2*ca[i/2]+1;
			for(int j = 0; j < 2*comp_size; j++){
				unsigned short int j1 = (j%2==0) ? 2*ca[j/2] : 2*ca[j/2] + 1;
				if(j1 > (i1|1)){
					break;
				} 
				int ind = j1 + (((i1 + 1)*(i1 + 1))/2);
				if(m2[ind]==INFINITY){
					continue;
				} 
				if(m2[ind] >= 0){
					pr->tmp[0] = max(pr->tmp[0],m2[ind]);
				}
				else{
					pr->tmp[1] = -1*m2[ind];
					pr->tmp[0] = max(pr->tmp[0],pr->tmp[1]);
				}
			}
		}
		cl =cl->next; 
		free(ca);
		
	}
	 /* multiply by epsilon */
	 opt_bound_of_scalar(pr,&pr->tmp[1],epsilon,false,false);
	 pr->tmp[0] = pr->tmp[0] * pr->tmp[1];
	 /* enlarge unstable coefficients in o1 */
	 cl = oo1->acl->head;
	 while(cl!=NULL){
		unsigned short int * ca = to_sorted_array(cl,o1->dim);
		unsigned short int comp_size = cl->size;
		if(!oo2->ti){
			for(int i = 0; i < comp_size; i++){
				int i1 = ca[i];
				for(int j = 0; j <=i; j++){
					int j1 = ca[j];
					handle_binary_relation(m2,oo2->acl,i1,j1,o1->dim);
				}
			}
		}
		for(int i = 0; i < 2*comp_size; i++){
			int i1 = (i%2==0)? 2*ca[i/2] : 2*ca[i/2]+1;
			for(int j = 0; j < 2*comp_size; j++){
				int j1 = (j%2==0)? 2*ca[j/2] : 2*ca[j/2]+1;
				if(j1 > (i1 | 1)){
					break;
				}
				int ind = j1 + (((i1+1)*(i1+1))/2);
				if(m1[ind] < m2[ind]){
					mm[ind] = m2[ind] + pr->tmp[0];
				}
				else{
					mm[ind] = m1[ind];
				}
			}
		}
		cl = cl->next;
		free(ca);
	}
    }
    else{
	    r->m->is_dense = true;
	    r->m->ti = true;
	    for (i=0;i<size;i++) {
	      if (m2[i]==INFINITY){
		 continue;
	      }
	      if (m2[i]>=0){ 
		pr->tmp[0] = max(pr->tmp[0],m2[i]);
	      }
	      else {
		pr->tmp[1] = -1*m2[i];
		pr->tmp[0] = max(pr->tmp[0],pr->tmp[1]);
	      }
	    }
	    /* multiply by epsilon */
	    opt_bound_of_scalar(pr,&pr->tmp[1],epsilon,false,false);
	    pr->tmp[0] = pr->tmp[0] * pr->tmp[1];
	    /* enlarge unstable coefficients in o1 */
	    for (i=0;i<size;i++){
	      if (m1[i] < m2[i]) {
		mm[i] = m2[i] + pr->tmp[0];
	      }
	      else {
		mm[i] = m1[i];
	      }
	    }
    }
    r->m->nni = oo1->nni;
  }
  return r;
}
Beispiel #4
0
opt_oct_t* opt_oct_add_epsilon(ap_manager_t* man, opt_oct_t* o, ap_scalar_t* epsilon)
{
  opt_oct_internal_t* pr = opt_oct_init_from_manager(man,AP_FUNID_WIDENING,2);
  opt_oct_t* r = opt_oct_alloc_internal(pr,o->dim,o->intdim);
  opt_oct_mat_t * oo;
  oo = o->m ? o->m : o->closed;
  if (oo) {
    double *m = oo->mat;
    size_t i;
    /* compute max of finite bounds */
    pr->tmp[0] = 0;
    int size = 2*(o->dim)*(o->dim+1);
    r->m = opt_hmat_alloc(size);
    free_array_comp_list(r->m->acl);
    double *mm = r->m->mat;
    if(!oo->is_dense){
	r->m->is_dense = false;
	r->m->ti = false;
	r->m->acl = copy_array_comp_list(oo->acl);
	comp_list_t * cl = oo->acl->head;
	while(cl != NULL){
		unsigned short int * ca = to_sorted_array(cl,o->dim);
		unsigned short int comp_size = cl->size;
		for(int i = 0; i < 2*comp_size; i++){
			unsigned short int i1 = (i%2==0)? 2*ca[i/2] : 2*ca[i/2]+1;
			for(int j = 0; j < 2*comp_size; j++){
				unsigned short int j1 = (j%2==0) ? 2*ca[j/2] : 2*ca[j/2] + 1;
				if(j1 > (i1|1)){
					break;
				} 
				int ind = j1 + (((i1 + 1)*(i1 + 1))/2);
				if(m[ind]==INFINITY){
					continue;
				} 
				if(m[ind] >= 0){
					pr->tmp[0] = max(pr->tmp[0],m[ind]);
				}
				else{
					pr->tmp[1] = -1*m[ind];
					pr->tmp[0] = max(pr->tmp[0],pr->tmp[1]);
				}
			}
		}
		cl =cl->next; 
		free(ca);
		
	}
	 /* multiply by epsilon */
	 opt_bound_of_scalar(pr,&pr->tmp[1],epsilon,false,false);
	 pr->tmp[0] = pr->tmp[0]*pr->tmp[1];
	/* enlarge bounds */
	cl = oo->acl->head;
	while(cl != NULL){
		unsigned short int * ca = to_sorted_array(cl,o->dim);
		unsigned short int comp_size = cl->size;
		for(int i = 0; i < 2*comp_size; i++){
			unsigned short int i1 = (i%2==0)? 2*ca[i/2] : 2*ca[i/2]+1;
			for(int j = 0; j < 2*comp_size; j++){
				unsigned short int j1 = (j%2==0) ? 2*ca[j/2] : 2*ca[j/2] + 1;
				if(j1 > (i1|1)){
					break;
				} 
				int ind = j1 + (((i1 + 1)*(i1 + 1))/2);
				mm[ind] = m[ind] + pr->tmp[0];
			}
		}
		cl =cl->next; 
		free(ca);		
	}
	/*for(int i = 0; i < o->dim; i++){
		//if(find(oo->acl,i)==NULL){
			int i1 = 2*i;
			int i2 = i1+1;
			int ind1 = i1 + (((i1+1)*(i1+1))/2);
			mm[ind1] = pr->tmp[0];
			int ind2 = i2 + (((i2+1)*(i2+1))/2);
			mm[ind2] = pr->tmp[0];
			comp_list_t * cl1 = create_comp_list();
			insert_comp(cl1,i);
			insert_comp_list(oo->acl,cl1);
		//}
	}*/
    }
    else{
	    r->m->is_dense = true;
	    r->m->ti = true;
	    for (i=0;i<size;i++) {
	      if (m[i]==INFINITY){
		 continue;
	      }
	      if (m[i]>=0){ 
		 pr->tmp[0] = max(pr->tmp[0],m[i]);
	      }
	      else {
		pr->tmp[1] = -1*m[i];
		pr->tmp[0] = max(pr->tmp[0],pr->tmp[1]);
	      }
	    }
	    /* multiply by epsilon */
	    opt_bound_of_scalar(pr,&pr->tmp[1],epsilon,false,false);
	    pr->tmp[0] = pr->tmp[0]*pr->tmp[1];
	    /* enlarge bounds */
	    #if defined(VECTOR)
	  	v_double_type val = v_set1_double(pr->tmp[0]);
		for(i = 0; i < size/v_length; i++){
			v_double_type op1 = v_load_double(m + i*v_length);
			v_double_type op2 = v_add_double(val,op1);
			v_store_double(mm + i*v_length,op2);
		}  
	    #else
		for (i=0;i<(size/v_length)*v_length;i++){
	      		mm[i] = m[i] + pr->tmp[0];
	    	}
	    #endif
		for(i = (size/v_length)*v_length;i < size; i++){
			mm[i] = m[i] + pr->tmp[0];
		}
    }
     r->m->nni = oo->nni;
  }
 
  return r;
}