NCBI C++ ToolKit
seq_masker_cache_boost.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: seq_masker_cache_boost.cpp 33815 2007-05-04 17:18:18Z kazimird $
2  * ===========================================================================
3  *
4  * PUBLIC DOMAIN NOTICE
5  * National Center for Biotechnology Information
6  *
7  * This software/database is a "United States Government Work" under the
8  * terms of the United States Copyright Act. It was written as part of
9  * the author's official duties as a United States Government employee and
10  * thus cannot be copyrighted. This software/database is freely available
11  * to the public for use. The National Library of Medicine and the U.S.
12  * Government have not placed any restriction on its use or reproduction.
13  *
14  * Although all reasonable efforts have been taken to ensure the accuracy
15  * and reliability of the software and data, the NLM and the U.S.
16  * Government do not and cannot warrant the performance or results that
17  * may be obtained by using this software or data. The NLM and the U.S.
18  * Government disclaim all warranties, express or implied, including
19  * warranties of performance, merchantability or fitness for any particular
20  * purpose.
21  *
22  * Please cite the author in any work or product based on this material.
23  *
24  * ===========================================================================
25  *
26  * Author: Aleksandr Morgulis
27  *
28  * File Description:
29  * CSeqMaskerCacheBoost member and method definitions.
30  *
31  */
32 
33 #include <ncbi_pch.hpp>
34 
36 
38 
39 //------------------------------------------------------------------------------
41 {
42  pos /= od_->divisor_;
43  TSeqPos word = pos/(8*sizeof( Uint4 ));
44  TSeqPos bit = pos%(8*sizeof( Uint4 ));
45  Uint1 res = (((od_->cba_[word])>>bit)&0x1) == 0 ? 0 : 1;
46  return res;
47 }
48 
49 //------------------------------------------------------------------------------
51 {
52  for( unsigned int i = 0; i < nu_; ++i )
53  if( bit_at( window_[i] ) != 0 )
54  return false;
55 
56  return true;
57 }
58 
59 //------------------------------------------------------------------------------
61 {
62  if( od_ == 0 || od_->cba_ == 0 )
63  return true;
64 
65  while( window_ )
66  {
67  if( last_checked_ + 1 != window_.End() )
68  {
69  if( !full_check() )
70  break;
71  }
72  else if( bit_at( window_[nu_-1] ) != 0 )
73  break;
74 
76  ++window_;
77  }
78 
79  return bool( window_ );
80 }
81 
bool Check()
Check if the current state of the window and advance.
const CSeqMaskerIstat::optimization_data * od_
Uint1 bit_at(TUnit pos) const
CSeqMaskerWindow::TUnit TUnit
Uint4 End() const
Get the current ending position of the window.
#define bool
Definition: bool.h:34
unsigned int TSeqPos
Type for sequence locations and lengths.
Definition: ncbimisc.hpp:875
uint8_t Uint1
1-byte (8-bit) unsigned integer
Definition: ncbitype.h:99
uint32_t Uint4
4-byte (32-bit) unsigned integer
Definition: ncbitype.h:103
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
int i
Uint4 divisor_
How many units are represented by one 4-byte word in cba_ array.
Uint4 * cba_
Bit array with zeroes where all corresponding units have counts below t_extend.
Modified on Fri Sep 20 14:57:35 2024 by modify_doxy.py rev. 669887