bdb_util.cpp

来自「ncbi源码」· C++ 代码 · 共 184 行

CPP
184
字号
/* * =========================================================================== * PRODUCTION $Log: bdb_util.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 18:37:39  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4 * PRODUCTION * =========================================================================== *//*  $Id: bdb_util.cpp,v 1000.1 2004/06/01 18:37:39 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: Anatoliy Kuznetsov * * File Description: BDB library utilities.  * */#include <ncbi_pch.hpp>#include <bdb/bdb_util.hpp>#include <util/strsearch.hpp>BEGIN_NCBI_SCOPE/// Check if field is a variant of string, returns pointer on the/// internal buffer (or NULL).////// @internalstaticconst char* BDB_GetStringFieldBuf(const CBDB_Field& fld){    const CBDB_FieldString* str_fld =           dynamic_cast<const CBDB_FieldString*>(&fld);    if (str_fld) {        return (const char*)fld.GetBuffer();    } else {        const CBDB_FieldLString* lstr_fld =               dynamic_cast<const CBDB_FieldLString*>(&fld);        if (lstr_fld) {            return (const char*)fld.GetBuffer();        }    }    return 0;}/// Search for value in the field buffer////// @return -1 if not found, otherwise field number////// @internalstaticint BDB_find_field(const CBDB_BufferManager& buffer_man,                   const CBoyerMooreMatcher& matcher){    int fidx = -1;    unsigned int fcount = buffer_man.FieldCount();    for (unsigned i = 0; i < fcount; ++i) {        const CBDB_Field& fld = buffer_man.GetField(i);        if (fld.IsNull()) {            continue;        }        unsigned str_buf_len;        const char* str_buf = BDB_GetStringFieldBuf(fld);        if (str_buf && (str_buf_len = fld.GetDataLength(str_buf))) {            int pos = matcher.Search(str_buf, 0, str_buf_len);            if (pos >= 0) {                fidx = i;                break;            }        }    } // for i    return fidx;}CBDB_File::TUnifiedFieldIndex BDB_find_field(const CBDB_File& dbf,                                              const CBoyerMooreMatcher& matcher){    CBDB_File::TUnifiedFieldIndex fidx = 0;    const CBDB_BufferManager* buffer_man;    buffer_man =  dbf.GetKeyBuffer();    if (buffer_man) {        fidx = BDB_find_field(*buffer_man, matcher);        if (fidx >= 0) {            fidx = BDB_GetUFieldIdx(fidx, true /* key */);            return fidx;        } else {            fidx = 0;        }    }    buffer_man =  dbf.GetDataBuffer();    if (buffer_man) {        fidx = BDB_find_field(*buffer_man, matcher);        if (fidx >= 0) {            fidx = BDB_GetUFieldIdx(fidx, false /* key */);            return fidx;                } else {            fidx = 0;        }    }    return fidx;}int BDB_get_rowid(const CBDB_File& dbf){    const CBDB_BufferManager* buffer_man;    buffer_man =  dbf.GetKeyBuffer();    if (!buffer_man) {        return 0;    }    const CBDB_Field& fld = buffer_man->GetField(0);    {{    const CBDB_FieldInt2* fi = dynamic_cast<const CBDB_FieldInt2*>(&fld);    if (fi)        return fi->Get();    }}    {{    const CBDB_FieldInt4* fi = dynamic_cast<const CBDB_FieldInt4*>(&fld);    if (fi)        return fi->Get();    }}    {{    const CBDB_FieldUint4* fi = dynamic_cast<const CBDB_FieldUint4*>(&fld);    if (fi)        return fi->Get();    }}    return 0;}END_NCBI_SCOPE/* * =========================================================================== * $Log: bdb_util.cpp,v $ * Revision 1000.1  2004/06/01 18:37:39  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4 * * Revision 1.4  2004/05/17 20:55:12  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.3  2004/03/11 13:15:40  kuznets * Minor bugfix * * Revision 1.2  2004/03/10 14:03:11  kuznets * + BDB_get_rowid * * Revision 1.1  2004/03/08 13:34:06  kuznets * Initial revision * * * =========================================================================== */

⌨️ 快捷键说明

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