/* * print summary of line usage * accuracy only guaranteed for wtmpx file started fresh */ static void printlin() { struct tbuf *tp; double ttime; int tsess, ton, toff; freopen(replin, "w", stdout); ttime = 0.0; tsess = ton = toff = 0; timet = MINS(lastime-firstime); printf("TOTAL DURATION IS %.0f MINUTES\n", timet); printf("LINE MINUTES PERCENT # SESS # ON # OFF\n"); qsort((char *)tbuf, tsize + 1, sizeof (tbuf[0]), (int (*)(const void *, const void *))tcmp); for (tp = tbuf; tp <= &tbuf[tsize]; tp++) { timei = MINS(tp->ttotal); ttime += timei; tsess += tp->tlsess; ton += tp->tlon; toff += tp->tloff; printf("%-*.*s %-7.0f %-7.0f %-6d %-4d %-5d\n", OUTPUT_LSZ, OUTPUT_LSZ, tp->tline, timei, (timet > 0.)? 100*timei/timet : 0., tp->tlsess, tp->tlon, tp->tloff); } printf("TOTALS %-7.0f -- %-6d %-4d %-5d\n", ttime, tsess, ton, toff); }
int main(int argc, char **argv) { tb.ta_sc = 1; while (scanf("%lu\t%ld\t%s\t%lu\t%lu\t%lu\t%*[^\n]", &cb.ct_tty, &cb.ct_uid, cb.ct_name, &cb.ct_con[0], &cb.ct_con[1], &cb.ct_start) != EOF) { tb.ta_uid = cb.ct_uid; CPYN(tb.ta_name, cb.ct_name); tb.ta_con[0] = MINS(cb.ct_con[0]); tb.ta_con[1] = MINS(cb.ct_con[1]); fwrite(&tb, sizeof (tb), 1, stdout); } exit(0); }
void knn_full (int distance_type,int n1, int n2, int d, int k, const float *mat2, const float *mat1, const float *vw_weights, int *vw, float *vwdis) { assert (k <= n2); if(k==1) { nn_single_full(distance_type, n1, n2, d, mat2, mat1, vw_weights, vw, vwdis); return; } int step1 = MIN (n1, BLOCK_N1), step2 = MIN (n2, BLOCK_N2); float *dists = fvec_new (step1 * step2); /* allocate all heaps at once */ long oneh = fbinheap_sizeof(k); // oneh=(oneh+7) & ~7; /* round up to 8 bytes */ char *minbuf = malloc (oneh * step1); #define MINS(i) ((fbinheap_t*)(minbuf + oneh * i)) long i1,i2,j1,j2; for (i1 = 0; i1 < n1; i1 += step1) { int m1 = MIN (step1, n1 - i1); /* clear mins */ for (j1 = 0; j1 < m1; j1++) fbinheap_init(MINS(j1),k); for (i2 = 0; i2 < n2 ; i2 += step2) { int m2 = MIN (step2, n2 - i2); if(distance_type==2) compute_cross_distances (d, m2, m1, mat2+i2*d, mat1+i1*d, dists); else compute_cross_distances_alt (distance_type, d, m2, m1, mat2+i2*d, mat1+i1*d, dists); if(vw_weights) { for(j1=0;j1<m1;j1++) for (j2 = 0; j2 < m2; j2++) dists[j1 * m2 + j2] *= vw_weights[j2 + i2]; } /* update mins */ for(j1=0;j1<m1;j1++) { float *dline=dists+j1*m2; fbinheap_addn_label_range(MINS(j1),m2,i2,dline); } } for (j1 = 0; j1 < m1; j1++) { fbinheap_t *mh = MINS(j1); assert (mh->k == k); fbinheap_sort(mh, vw + (i1+j1) * k, vwdis + (i1+j1) * k); } } #undef MINS free (minbuf); free(dists); }