コード例 #1
0
ファイル: kmerizer.cpp プロジェクト: silvn/snapdragon
kword_t * Kmerizer::canonicalize(kword_t *packed, kword_t *rcpack, size_t *bin) {

    // copy the words (reverse their order)
    for (size_t i=0;i<nwords;i++)
        rcpack[i] = packed[nwords-1-i];

    // shift bits from word to word if necessary
    if (lshift) {
        for (size_t i=0;i<nwords-1;i++) {
            rcpack[i] |= rcpack[i+1] << lshift;
            rcpack[i+1] >>= rshift;
        }
    }

    size_t rcbin = revcomp_8(rcpack[0]);
    if (rcbin > *bin)
        return packed;

    // shift each word by 8 bits
    rcpack[0] >>= 8;
    for (size_t i=0;i<nwords-1;i++) {
        rcpack[i] |= rcpack[i+1] << 56;
        rcpack[i+1] >>= 8;
    }
    if (lshift >= 8)
        rcpack[nwords-1] |= *bin << (lshift-8);
    else if (lshift > 0) {
        rcpack[nwords-2] |= *bin << 56+lshift;
        rcpack[nwords-1] |= *bin >> lshift;
    }
コード例 #2
0
ファイル: kmer.hpp プロジェクト: raymondr/cosmo
inline static uint64_t revcomp_block(uint64_t x) {
    uint64_t output;

    unsigned char * p = (unsigned char *) &x;
    unsigned char * q = (unsigned char *) &output;
    q[7] = revcomp_8(p[0]);
    q[6] = revcomp_8(p[1]);
    q[5] = revcomp_8(p[2]);
    q[4] = revcomp_8(p[3]);
    q[3] = revcomp_8(p[4]);
    q[2] = revcomp_8(p[5]);
    q[1] = revcomp_8(p[6]);
    q[0] = revcomp_8(p[7]);
    return output;
}