⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sequtil_shared.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: sequtil_shared.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:42:24  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * PRODUCTION * =========================================================================== *//*  $Id: sequtil_shared.cpp,v 1000.1 2004/06/01 19:42:24 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Mati Shomrat * * File Description: *   Shared utility functions for the various sequtil classes. */   #include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <util/sequtil/sequtil.hpp>#include "sequtil_shared.hpp"BEGIN_NCBI_SCOPE// converts one byte for another using the conversion table.SIZE_TYPE convert_1_to_1(const char* src,  TSeqPos pos, TSeqPos length, char* dst,  const Uint1* table){    const char* iter = src + pos;    const char* end = src + pos + length;    for ( ; iter != end; ++iter, ++dst ) {        *dst = table[static_cast<Uint1>(*iter)];    }        return length;}SIZE_TYPE convert_1_to_2(const char* src, TSeqPos pos, TSeqPos length, char* dst, const Uint1* table){    size_t size = length;    const char* iter = src + (pos / 2);    // first position    if ( pos % 2 != 0 ) {        *dst = table[static_cast<unsigned char>(*iter) * 2 + 1];        ++dst;        ++iter;        --size;    }    // NB: we "trick" the compiler so that we copy 2 bytes instead    // of one with each assignment operation    Uint2* out_i  = reinterpret_cast<Uint2*>(dst);    const Uint2* table2 = reinterpret_cast<const Uint2*>(table);    for( size_t i = size / 2; i; --i, ++out_i, ++iter ) {        *out_i = table2[static_cast<Uint1>(*iter)];    }    // last position    if ( size % 2 != 0 )    {        // just copy a single char        char* last = reinterpret_cast<char*>(out_i);        *last = table[static_cast<Uint1>(*iter) * 2];    }    return length;}SIZE_TYPE convert_1_to_4(const char* src,  TSeqPos pos, TSeqPos length, char* dst,  const Uint1* table){    size_t size = length;    const char* iter = src + (pos / 4);    // first position    if ( pos % 4 != 0 ) {        size_t to = min(static_cast<unsigned int>(4), (pos % 4) + length);        for ( size_t i = pos % 4; i < to; ++i, ++dst ) {            *dst = table[static_cast<Uint1>(*iter) * 4 + i];        }        ++iter;        size -= to - (pos % 4);    }    // NB: we "trick" the compiler so that we copy 4 bytes instead    // of one with each assignment operation    Uint4* out_i  = reinterpret_cast<Uint4*>(dst);    const Uint4* table4 = reinterpret_cast<const Uint4*>(table);    for( size_t i = size / 4; i; --i, ++out_i, ++iter ) {        *out_i = table4[static_cast<Uint1>(*iter)];    }    // last position    if ( size % 4 != 0 )    {        char* last = reinterpret_cast<char*>(out_i);        for ( size_t i = 0; i < size % 4; ++i, ++last ) {            *last = table[static_cast<Uint1>(*iter) * 4 + i];        }    }    return length;}SIZE_TYPE copy_1_to_1_reverse(const char* src, TSeqPos pos, TSeqPos length, char* dst,  const Uint1* table){    const char* begin = src + pos;    const char* iter = src + pos + length;    for ( ; iter != begin; ++dst ) {        *dst = table[static_cast<Uint1>(*--iter)];    }        return length;}SIZE_TYPE revcmp(char* buf,  TSeqPos pos, TSeqPos length, const Uint1* table){    char* first = buf + pos;    char* last  = first + length - 1;    char temp;    for ( ; first <= last; ++first, --last ) {        temp = table[static_cast<Uint1>(*first)];        *first = table[static_cast<Uint1>(*last)];        *last = temp;    }    if ( pos != 0 ) {        copy(buf + pos, buf + pos + length, buf);    }    return length;}size_t GetBasesPerByte(CSeqUtil::TCoding coding){    if ( coding == CSeqUtil::e_Ncbi2na ) {        return 4;    } else if ( coding == CSeqUtil::e_Ncbi4na ) {        return 2;    }        return 1;}END_NCBI_SCOPE/** ===========================================================================** $Log: sequtil_shared.cpp,v $* Revision 1000.1  2004/06/01 19:42:24  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2** Revision 1.2  2004/05/17 21:08:53  gorelenk* Added include of PCH ncbi_pch.hpp** Revision 1.1  2003/10/08 13:36:10  shomrat* Initial version*** ===========================================================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -