packages feed

biohazard-2.0: cbits/loops.c

void nuc_loop( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;

    while( u < v ) {
        char a = q[ u ] ;
        char b = q[ u + stride ] ;
        char a1 = a ? 0x10 << (a&3) : 0xf0 ;
        char b1 = b ? 0x1  << (b&3) : 0xf  ;
        *p++ = a1 | b1 ;
        u += stride+stride ;
    }
    if( u == v ) {
        char a = q[ u ] ;
        char a1 = a ? 0x10 << (a&3) : 0xf0 ;
        *p = a1 ;
    }
}

void nuc_loop_wide( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;

    while( u < v ) {
        char a = q[ u ] ;
        *p++ = a ? 0x1 << (a&3) : 0xf  ;
        u += stride ;
    }
}

void nuc_loop_asc( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;

    while( u <= v ) {
        char a = q[ u ] ;
        *p++ = a == 0 ? 'N' : (a&3) == 0 ? 'A' : (a&3) == 1 ? 'C' : (a&3) == 2 ? 'G' : 'T' ;
        u += stride ;
    }
    *p = 0 ;
}

void nuc_loop_asc_rev( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;

    while( u <= v ) {
        char a = q[ v ] ;
        *p++ = a == 0 ? 'N' : (a&3) == 0 ? 'T' : (a&3) == 1 ? 'G' : (a&3) == 2 ? 'C' : 'A' ;
        v -= stride ;
    }
    *p = 0 ;
}

void qual_loop( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;
    while( u <= v ) {
        *p++ = (q[u] >> 2) & 0x3f ;
        u += stride ;
    }
}

void qual_loop_asc( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;
    while( u <= v ) {
        *p++ = 33 + ((q[u] >> 2) & 0x3f) ;
        u += stride ;
    }
    *p = 0 ;
}

void qual_loop_asc_rev( char* p, int stride, char* q, int u, int v )
{
    u *= stride ;
    v *= stride ;
    while( u <= v ) {
        *p++ = 33 + ((q[v] >> 2) & 0x3f) ;
        v -= stride ;
    }
    *p = 0 ;
}

int int_loop( char* p, int x )
{
    *p++ = ':' ;
    if( x == 0 ) {
        *p = '0' ;
        return 2 ;
    }
    char *q = p ;
    while( x > 0 ) {
        *q++ = '0' + x % 10 ;
        x /= 10 ;
    }
    int r = q-p ;
    --q ;
    while( p < q ) {
        char c = *p ;
        *p++ = *q ;
        *q-- = c ;
    }
    return r+1 ;
}