static size_t CC ext_rec_size ( struct VCursor const *curs, int64_t row_id, void *data ) { size_t res = 0; uint32_t q_len; rc_t rc = read_base_and_len( curs, "QUALITY", row_id, NULL, &q_len ); if ( rc == 0 ) { ext_rec * rec; res = ( sizeof *rec ) + q_len; } return res; }
static rc_t CC ext_rec_populate ( void *obj, const PlacementRecord *placement, struct VCursor const *curs, INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data ) { const bool * orientation; rc_t rc = read_base_and_len( curs, "REF_ORIENTATION", placement->id, (const void **)&orientation, NULL ); if ( rc == 0 ) { uint8_t * quality; uint32_t quality_len; ext_rec * rec = ( ext_rec * ) obj; rec->reverse = *orientation; rc = read_base_and_len( curs, "QUALITY", placement->id, (const void **)&quality, &quality_len ); if ( rc == 0 ) { rec->quality = ( uint8_t * )rec; rec->quality += sizeof ( * rec ); memcpy( rec->quality, quality, quality_len ); } } return rc; }
static rc_t CC alloc_size( struct VCursor const *curs, int64_t row_id, size_t * size, void *data, void * placement_ctx ) { rc_t rc = 0; walker_rec * rec; struct ref_walker * walker = data; walker_col_ids * col_ids = placement_ctx; *size = ( sizeof *rec ); if ( !walker->omit_quality ) { uint32_t q_len; rc = read_base_and_len( curs, col_ids->idx_quality, row_id, NULL, &q_len ); if ( rc == 0 ) *size += q_len; } return rc; }
static rc_t CC populate_data( void *obj, const PlacementRecord *placement, struct VCursor const *curs, INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data, void * placement_ctx ) { walker_rec * rec = obj; struct ref_walker * walker = data; walker_col_ids * col_ids = placement_ctx; rc_t rc = 0; rec->quality = NULL; if ( !walker->process_dups ) { const uint8_t * read_filter; uint32_t read_filter_len; rc = read_base_and_len( curs, col_ids->idx_read_filter, placement->id, (const void **)&read_filter, &read_filter_len ); if ( rc == 0 ) { if ( ( *read_filter == SRA_READ_FILTER_REJECT )|| ( *read_filter == SRA_READ_FILTER_CRITERIA ) ) { rc = RC( rcAlign, rcType, rcAccessing, rcId, rcIgnored ); } } } if ( rc == 0 ) { const bool * orientation; rc = read_base_and_len( curs, col_ids->idx_ref_orientation, placement->id, (const void **)&orientation, NULL ); if ( rc == 0 ) rec->reverse = *orientation; } if ( rc == 0 && !walker->omit_quality ) { const uint8_t * quality; uint32_t quality_len; rc = read_base_and_len( curs, col_ids->idx_quality, placement->id, (const void **)&quality, &quality_len ); if ( rc == 0 ) { rec->quality = ( uint8_t * )rec; rec->quality += sizeof ( * rec ); memcpy( rec->quality, quality, quality_len ); } } if ( rc == 0 && walker->read_tlen ) { const int32_t * tlen; uint32_t tlen_len; rc = read_base_and_len( curs, col_ids->idx_template_len, placement->id, (const void **)&tlen, &tlen_len ); if ( rc == 0 && tlen_len > 0 ) rec->tlen = *tlen; else rec->tlen = 0; } else rec->tlen = 0; return rc; }