Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}