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; }
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); }
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; }
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; }