competitive/string/
mod.rs1use crate::algebra::{Gf2_63, Invertible, Mersenne61, Monoid, Ring, SemiRing};
4use crate::data_structure::RangeMinimumQuery;
5use crate::math::{Convolve, ConvolveSteps};
6use crate::num::{Zero, montgomery};
7use crate::tools::Xorshift;
8
9#[codesnip::entry("KnuthMorrisPratt")]
10pub use self::knuth_morris_pratt::KnuthMorrisPratt;
11#[codesnip::entry("RollingHash")]
12pub use self::rolling_hash::{
13 Gf2_63x1, Gf2_63x2, Gf2_63x3, HashedRangeChained, Mersenne61x1, Mersenne61x2, Mersenne61x3,
14 RollingHasher,
15};
16#[codesnip::entry("StringSearch")]
17pub use self::string_search::{MultipleStringSearch, StringSearch};
18#[codesnip::entry("SuffixArray")]
19pub use self::suffix_array::SuffixArray;
20#[codesnip::entry("SuffixAutomaton")]
21pub use self::suffix_automaton::SuffixAutomaton;
22#[codesnip::entry("SuffixTree")]
23pub use self::suffix_tree::{MultipleSuffixTree, SuffixTree};
24#[codesnip::entry("wildcard_pattern_matching")]
25pub use self::wildcard_pattern_matching::wildcard_pattern_matching;
26#[codesnip::entry("ZAlgorithm")]
27pub use self::z_algorithm::Zarray;
28
29#[cfg_attr(nightly, codesnip::entry("KnuthMorrisPratt"))]
30mod knuth_morris_pratt;
31#[cfg_attr(
32 nightly,
33 codesnip::entry(
34 "RollingHash",
35 include("Xorshift", "algebra", "ring", "Gf2_63", "Mersenne61")
36 )
37)]
38pub mod rolling_hash;
39#[cfg_attr(
40 nightly,
41 codesnip::entry("StringSearch", include("SuffixArray", "RangeMinimumQuery"))
42)]
43mod string_search;
44#[cfg_attr(nightly, codesnip::entry("SuffixArray", include("binary_search")))]
45mod suffix_array;
46#[cfg_attr(nightly, codesnip::entry("SuffixAutomaton"))]
47mod suffix_automaton;
48#[cfg_attr(nightly, codesnip::entry("SuffixTree", include("SuffixArray")))]
49mod suffix_tree;
50#[cfg_attr(nightly, codesnip::entry(include("NumberTheoreticTransform")))]
51mod wildcard_pattern_matching;
52#[cfg_attr(nightly, codesnip::entry("ZAlgorithm"))]
53mod z_algorithm;