static rc_t read_loop( statistic * data, context *ctx, statistic_reader *reader, const VCursor *my_cursor ) { int64_t first; uint64_t count; rc_t rc = query_reader_rowrange( reader, &first, &count ); if ( rc != 0 ) LogErr( klogInt, rc, "query_statistic_rowrange() failed\n" ); else { if ( num_gen_empty( ctx->row_generator ) ) { rc = num_gen_add( ctx->row_generator, first, count ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_add() failed() failed\n" ); } else { rc = num_gen_trim( ctx->row_generator, first, count ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_trim() failed() failed\n" ); } if ( rc == 0 ) { const num_gen_iter *iter; rc = num_gen_iterator_make( ctx->row_generator, &iter ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_iterator_make() failed\n" ); else { uint64_t row_id; progressbar * progress; rc = make_progressbar( &progress ); if ( rc != 0 ) LogErr( klogInt, rc, "make_progressbar() failed\n" ); else { uint8_t fract_digits = calc_fract_digits( iter ); uint32_t percent; row_input row_data; while ( ( num_gen_iterator_next( iter, &row_id ) == 0 )&& ( rc == 0 ) ) { rc = Quitting(); if ( rc == 0 ) { /* ******************************************** */ rc = reader_get_data( reader, &row_data, row_id ); if ( rc == 0 ) { rc = extract_statistic_from_row( data, &row_data, row_id ); } /* ******************************************** */ if ( ctx->show_progress ) if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 ) update_progressbar( progress, fract_digits, percent ); } } destroy_progressbar( progress ); if ( ctx->show_progress ) OUTMSG(( "\n" )); } num_gen_iterator_destroy( iter ); } } } return rc; }
static rc_t CC qstats_trigger_impl(void *data, const VXformInfo *info, int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[]) { self_t *self = data; unsigned const nreads = argv[2].u.data.elem_count; unsigned nrofs = 0; unsigned i; unsigned start; rc_t rc = 0; uint8_t const *read = argv[0].u.data.base; uint8_t const *qual = argv[1].u.data.base; uint32_t const *rlen = argv[2].u.data.base; INSDC_SRA_xread_type const *rtyp = argv[3].u.data.base; char const *sgrp = argv[4].u.data.base; bool const *hmis = NULL; bool const *hrof = NULL; int32_t const *rofs = NULL; read += argv[0].u.data.first_elem; qual += argv[1].u.data.first_elem; rlen += argv[2].u.data.first_elem; rtyp += argv[3].u.data.first_elem; sgrp += argv[4].u.data.first_elem; if (argc > 5) { hmis = argv[5].u.data.base; hmis += argv[5].u.data.first_elem; hrof = argv[6].u.data.base; hrof += argv[6].u.data.first_elem; rofs = argv[7].u.data.base; rofs += argv[7].u.data.first_elem; nrofs = argv[7].u.data.elem_count; } for (start = i = 0; i < nreads && rc == 0; ++i) { row_input row; unsigned const len = rlen[i]; memset(&row, 0, sizeof(row)); row.spotgroup = sgrp; row.spotgroup_len = argv[4].u.data.elem_count; row.read = &read[start]; row.quality = &qual[start]; row.read_len = row.quality_len = len; row.reversed = (rtyp[i] & SRA_READ_TYPE_REVERSE) != 0; row.base_pos_offset = start; start += len; if (hmis) { row.has_mismatch = hmis; row.has_roffs = hrof; row.roffs = rofs; row.has_mismatch_len = row.has_roffs_len = len; row.roffs_len = nrofs; } rc = extract_statistic_from_row(&self->stats, &row); } return rc; }