The SeqAn Bidirectional FM Index. More...
#include <seqan3/search/fm_index/bi_fm_index.hpp>
Public Types | |
Text types | |
using | size_type = typename sdsl_index_type::size_type |
Type for representing positions in the indexed text. | |
Cursor types | |
using | cursor_type = bi_fm_index_cursor< bi_fm_index< is_collection_, sdsl_index_type > > |
The type of the bidirectional cursor. | |
using | fwd_cursor_type = fm_index_cursor< fm_index_type > |
The type of the unidirectional cursor on the original text. | |
using | rev_cursor_type = fm_index_cursor< rev_fm_index_type > |
The type of the unidirectional cursor on the reversed text. | |
Public Member Functions | |
cursor_type | begin () const noexcept |
Returns a seqan3::bi_fm_index_cursor on the index that can be used for searching. More... | |
template<std::ranges::Range text_t> | |
void | construct (text_t &&text) |
Constructs the index given a range. The range cannot be an rvalue (i.e. a temporary object) and has to be non-empty. More... | |
template<std::ranges::Range text_t> | |
void | construct (text_t &&text) |
bool | empty () const noexcept |
Checks whether the index is empty. More... | |
fwd_cursor_type | fwd_begin () const noexcept |
Returns a unidirectional seqan3::fm_index_cursor on the original text of the bidirectional index that can be used for searching. More... | |
bool | operator!= (bi_fm_index const &rhs) const noexcept |
Compares two indices. More... | |
bool | operator== (bi_fm_index const &rhs) const noexcept |
Compares two indices. More... | |
rev_cursor_type | rev_begin () const noexcept |
Returns a unidirectional seqan3::fm_index_cursor on the reversed text of the bidirectional index that can be used for searching. Note that because of the text being reversed, extend_right() resp. cycle_back() correspond to extend_left() resp. cycle_front() on the bidirectional index cursor. More... | |
size_type | size () const noexcept |
Returns the length of the indexed text including sentinel characters. More... | |
Constructors, destructor and assignment | |
bi_fm_index ()=default | |
Default constructor. | |
bi_fm_index (bi_fm_index const &)=default | |
Copy constructor. | |
bi_fm_index & | operator= (bi_fm_index const &)=default |
Copy assignment. | |
bi_fm_index (bi_fm_index &&)=default | |
Move constructor. | |
bi_fm_index & | operator= (bi_fm_index &&)=default |
Move assignment. | |
~bi_fm_index ()=default | |
Destructor. | |
template<std::ranges::Range text_t> | |
bi_fm_index (text_t &&text) | |
Constructor that immediately constructs the index given a range. The range cannot be empty. More... | |
Protected Types | |
Index types | |
using | sdsl_index_type = sdsl_index_type_ |
The type of the underlying SDSL index for the original text. | |
using | rev_sdsl_index_type = sdsl_index_type_ |
The type of the underlying SDSL index for the reversed text. | |
using | sdsl_char_type = typename sdsl_index_type::alphabet_type::char_type |
The type of the reduced alphabet type. (The reduced alphabet might be smaller than the original alphabet in case not all possible characters occur in the indexed text.) | |
using | sdsl_sigma_type = typename sdsl_index_type::alphabet_type::sigma_type |
The type of the alphabet size of the underlying SDSL index. | |
using | fm_index_type = fm_index< is_collection_, sdsl_index_type > |
The type of the underlying FM index for the original text. | |
using | rev_fm_index_type = fm_index< is_collection_, sdsl_index_type > |
The type of the underlying FM index for the reversed text. | |
Protected Attributes | |
fm_index_type | fwd_fm |
Underlying FM index for the original text. | |
rev_fm_index_type | rev_fm |
Underlying FM index for the reversed text. | |
size_t | sigma {0} |
The alphabet size of the text. | |
Static Protected Attributes | |
static constexpr bool | is_collection_ {is_collection} |
Indicates whether index is built over a collection. | |
Friends | |
template<typename fm_index_t > | |
class | fm_index_cursor |
The SeqAn Bidirectional FM Index.
is_collection | Indicates whether this index works on a text collection (true ) or a single text (false ). |
sdsl_index_type_ | The type of the underlying SDSL index, must model seqan3::SdslIndex. |
The seqan3::bi_fm_index is a fast and space-efficient bidirectional string index to search strings and collections of strings. In general, we recommend to favour the seqan3::bi_fm_index over the seqan3::fm_index if you want to allow multiple errors when searching.
Here is a short example on how to build an index and search a pattern using an cursor. Please note that there is a very powerful search module with a high-level interface seqan3::search that encapsulates the use of cursors.
Here is an example using a collection of strings (e.g. a genome with multiple chromosomes or a protein database):
|
inline |
Constructor that immediately constructs the index given a range. The range cannot be empty.
text_t | The type of range to construct from; must model std::ranges::BidirectionalRange. |
[in] | text | The text to construct from. |
At least linear.
|
inlinenoexcept |
Returns a seqan3::bi_fm_index_cursor on the index that can be used for searching.
Constant.
No-throw guarantee.
|
inline |
Constructs the index given a range. The range cannot be an rvalue (i.e. a temporary object) and has to be non-empty.
text_t | The type of range to construct from; must model std::ranges::BidirectionalRange. |
[in] | text | The text to construct from. |
At least linear.
No guarantee.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
inlinenoexcept |
Checks whether the index is empty.
true
if the index is empty, false
otherwise.Constant.
No-throw guarantee.
|
inlinenoexcept |
Returns a unidirectional seqan3::fm_index_cursor on the original text of the bidirectional index that can be used for searching.
Constant.
No-throw guarantee.
|
inlinenoexcept |
Compares two indices.
true
if the indices are unequal, false otherwise.Linear.
No-throw guarantee.
|
inlinenoexcept |
Compares two indices.
true
if the indices are equal, false otherwise.Linear.
No-throw guarantee.
|
inlinenoexcept |
Returns a unidirectional seqan3::fm_index_cursor on the reversed text of the bidirectional index that can be used for searching. Note that because of the text being reversed, extend_right() resp. cycle_back() correspond to extend_left() resp. cycle_front() on the bidirectional index cursor.
Constant.
No-throw guarantee.
|
inlinenoexcept |
Returns the length of the indexed text including sentinel characters.
Constant.
No-throw guarantee.