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 + -
显示快捷键?