competitive/string/
mod.rs

1//! string algorithms
2
3use crate::algebra::{Gf2_63, Invertible, Mersenne61, Monoid, Ring, SemiRing};
4use crate::algorithm::binary_search;
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("SuffixArray")]
17pub use self::suffix_array::SuffixArray;
18#[codesnip::entry("SuffixAutomaton")]
19pub use self::suffix_automaton::SuffixAutomaton;
20#[codesnip::entry("wildcard_pattern_matching")]
21pub use self::wildcard_pattern_matching::wildcard_pattern_matching;
22#[codesnip::entry("ZAlgorithm")]
23pub use self::z_algorithm::Zarray;
24
25#[cfg_attr(nightly, codesnip::entry("KnuthMorrisPratt"))]
26mod knuth_morris_pratt;
27#[cfg_attr(
28    nightly,
29    codesnip::entry(
30        "RollingHash",
31        include("Xorshift", "algebra", "ring", "Gf2_63", "Mersenne61")
32    )
33)]
34pub mod rolling_hash;
35#[cfg_attr(nightly, codesnip::entry("SuffixArray", include("binary_search")))]
36mod suffix_array;
37#[cfg_attr(nightly, codesnip::entry("SuffixAutomaton"))]
38mod suffix_automaton;
39#[cfg_attr(nightly, codesnip::entry(include("NumberTheoreticTransform")))]
40mod wildcard_pattern_matching;
41#[cfg_attr(nightly, codesnip::entry("ZAlgorithm"))]
42mod z_algorithm;