Esempio n. 1
0
static void RefSeq_RefSeq_close(RefSeq *const super)
{
    TableReaderRefSeq const *const reader = super->u.refSeq.reader;
    
    super->u.refSeq.reader = NULL;
    TableReaderRefSeq_Whack(reader);
}
Esempio n. 2
0
LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself, const VDBManager* vmgr,
                                               const VTable* table, uint32_t options, size_t cache)
{
    rc_t rc = 0;
    TableReaderRefSeq* self = NULL;

    if( cself == NULL || table == NULL ) {
        rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcNull);
    } else if( (self = calloc(1, sizeof(*self))) == NULL ) {
        rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
    } else {
        const TableReader* tmp;
        TableReaderColumn static_cols[] = {
            /* order important, see code below! */
            {0, "MAX_SEQ_LEN", {NULL}, 0, 0},
            {0, "SEQ_ID", {NULL}, 0, 0},
            {0, "TOTAL_SEQ_LEN", {NULL}, 0, 0},
            {0, "CIRCULAR", {NULL}, 0, 0},
            {0, "MD5", {NULL}, 0, ercol_Optional},
            {0, NULL, {NULL}, 0, 0}
        };
        if( (rc = TableReader_Make(&tmp, table, static_cols, 0)) == 0 ) {
            if( (rc = TableReader_ReadRow(tmp, 1)) == 0 ) {
                self->max_seq_len = static_cols[0].base.u32[0];
                self->total_seq_len = static_cols[2].base.u64[0];
                if( self->total_seq_len != static_cols[2].base.u64[0] ) {
                    rc = RC(rcAlign, rcType, rcConstructing, rcData, rcOutofrange);
                }
                if( static_cols[1].base.var != NULL ) {
                    if ( static_cols[ 1 ].len > sizeof( self->seq_id ) - 1 )
                    {
                        rc = RC( rcAlign, rcType, rcConstructing, rcBuffer, rcInsufficient );
                    }
                    else
                    {
                        string_copy( self->seq_id, ( sizeof self->seq_id ) -  1, static_cols[1].base.str, static_cols[1].len );
                        self->seq_id[ static_cols[ 1 ].len ] = '\0';
                    }
                }
                self->circular = static_cols[3].base.buul[0];
                if( static_cols[4].base.var != NULL ) {
                    memcpy(self->md5, static_cols[4].base.var, sizeof(self->md5));
                    self->has_md5 = true;
                }
            }
            TableReader_Whack(tmp);
        }

        memcpy(self->cols, TableReaderRefSeq_cols, sizeof(TableReaderRefSeq_cols));
        if( options & errefseq_4NA) {
            self->cols[0].flags |= ercol_Skip;
            self->cols[1].flags &= ~ercol_Skip;
            self->read = &self->cols[1];
        } else {
            self->read = &self->cols[0];
        }
        self->seq_len = &self->cols[3];
        rc = TableReader_Make(&self->base, table, self->cols, cache);
    }
    if( rc == 0 ) {
        *cself = self;
        /* ALIGN_DBG("table 0x%p opened 0x%p", table, self); */
    } else {
        TableReaderRefSeq_Whack(self);
        ALIGN_DBGERRP("table for 0x%p", rc, table);
    }
    return rc;
}