From 5388013aadcd9053d562aee022634559264c8287 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 26 Sep 2020 03:44:26 +0900 Subject: [PATCH 1/3] Get rid of absolute paths --- src/convolution.rs | 11 ++++------- src/internal_math.rs | 2 +- src/internal_queue.rs | 2 +- src/lazysegtree.rs | 7 ++++--- src/math.rs | 2 +- src/maxflow.rs | 6 +++--- src/mincostflow.rs | 2 +- src/modint.rs | 4 ++-- src/scc.rs | 2 +- src/segtree.rs | 8 ++++---- src/twosat.rs | 2 +- 11 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/convolution.rs b/src/convolution.rs index 9576e3e..91b7b33 100644 --- a/src/convolution.rs +++ b/src/convolution.rs @@ -8,9 +8,9 @@ macro_rules! modulus { const VALUE: u32 = $name as _; const HINT_VALUE_IS_PRIME: bool = true; - fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option>>> { + fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option<$crate::modint::ButterflyCache>>> { thread_local! { - static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option>> = ::std::default::Default::default(); + static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option<$crate::modint::ButterflyCache<$name>>> = ::std::default::Default::default(); } &BUTTERFLY_CACHE } @@ -19,7 +19,7 @@ macro_rules! modulus { }; } -use crate::{ +use super::{ internal_bit, internal_math, modint::{ButterflyCache, Modulus, RemEuclidU32, StaticModInt}, }; @@ -232,10 +232,7 @@ fn prepare() -> ButterflyCache { #[cfg(test)] mod tests { - use crate::{ - modint::{Mod998244353, Modulus, StaticModInt}, - RemEuclidU32, - }; + use super::super::modint::{Mod998244353, Modulus, RemEuclidU32, StaticModInt}; use rand::{rngs::ThreadRng, Rng as _}; use std::{ convert::{TryFrom, TryInto as _}, diff --git a/src/internal_math.rs b/src/internal_math.rs index fa1021a..d1d8f30 100644 --- a/src/internal_math.rs +++ b/src/internal_math.rs @@ -228,7 +228,7 @@ pub(crate) fn primitive_root(m: i32) -> i32 { mod tests { #![allow(clippy::unreadable_literal)] #![allow(clippy::cognitive_complexity)] - use crate::internal_math::{inv_gcd, is_prime, pow_mod, primitive_root, safe_mod, Barrett}; + use super::{inv_gcd, is_prime, pow_mod, primitive_root, safe_mod, Barrett}; use std::collections::HashSet; #[test] diff --git a/src/internal_queue.rs b/src/internal_queue.rs index 5e51e9a..5266591 100644 --- a/src/internal_queue.rs +++ b/src/internal_queue.rs @@ -51,7 +51,7 @@ impl SimpleQueue { #[cfg(test)] mod test { - use crate::internal_queue::SimpleQueue; + use super::SimpleQueue; #[allow(clippy::cognitive_complexity)] #[test] diff --git a/src/lazysegtree.rs b/src/lazysegtree.rs index 47020a8..540fbab 100644 --- a/src/lazysegtree.rs +++ b/src/lazysegtree.rs @@ -1,5 +1,5 @@ -use crate::internal_bit::ceil_pow2; -use crate::Monoid; +use super::internal_bit::ceil_pow2; +use super::Monoid; pub trait MapMonoid { type M: Monoid; @@ -314,7 +314,8 @@ where #[cfg(test)] mod tests { - use crate::{LazySegtree, MapMonoid, Max}; + use super::super::segtree::Max; + use super::{LazySegtree, MapMonoid}; struct MaxAdd; impl MapMonoid for MaxAdd { diff --git a/src/math.rs b/src/math.rs index 5f2f1d5..272bbe9 100644 --- a/src/math.rs +++ b/src/math.rs @@ -1,4 +1,4 @@ -use crate::internal_math; +use super::internal_math; use std::mem::swap; diff --git a/src/maxflow.rs b/src/maxflow.rs index f01ca4d..c81d94c 100644 --- a/src/maxflow.rs +++ b/src/maxflow.rs @@ -1,6 +1,6 @@ #![allow(dead_code)] -use crate::internal_queue::SimpleQueue; -use crate::internal_type_traits::Integral; +use super::internal_queue::SimpleQueue; +use super::internal_type_traits::Integral; use std::cmp::min; use std::iter; @@ -226,7 +226,7 @@ struct _Edge { #[cfg(test)] mod test { - use crate::{Edge, MfGraph}; + use super::{Edge, MfGraph}; #[test] fn test_max_flow_wikipedia() { diff --git a/src/mincostflow.rs b/src/mincostflow.rs index 124eeff..fcb52fe 100644 --- a/src/mincostflow.rs +++ b/src/mincostflow.rs @@ -1,4 +1,4 @@ -use crate::internal_type_traits::Integral; +use super::internal_type_traits::Integral; pub struct MinCostFlowEdge { pub from: usize, diff --git a/src/modint.rs b/src/modint.rs index a589c09..4ac79cd 100644 --- a/src/modint.rs +++ b/src/modint.rs @@ -10,7 +10,7 @@ //! - The type of the argument of `pow` is `u64`, not `i64`. //! - Modints implement `FromStr` and `Display`. Modints in the original ACL don't have `operator<<` or `operator>>`. -use crate::internal_math; +use super::internal_math; use std::{ cell::RefCell, convert::{Infallible, TryInto as _}, @@ -681,7 +681,7 @@ impl_folding! { #[cfg(test)] mod tests { - use crate::modint::ModInt1000000007; + use super::ModInt1000000007; #[test] fn static_modint_new() { diff --git a/src/scc.rs b/src/scc.rs index 2eff835..d33c15b 100644 --- a/src/scc.rs +++ b/src/scc.rs @@ -1,4 +1,4 @@ -use crate::internal_scc; +use super::internal_scc; pub struct SccGraph { internal: internal_scc::SccGraph, diff --git a/src/segtree.rs b/src/segtree.rs index b543aa3..9d6b820 100644 --- a/src/segtree.rs +++ b/src/segtree.rs @@ -1,5 +1,5 @@ -use crate::internal_bit::ceil_pow2; -use crate::internal_type_traits::{BoundedAbove, BoundedBelow, One, Zero}; +use super::internal_bit::ceil_pow2; +use super::internal_type_traits::{BoundedAbove, BoundedBelow, One, Zero}; use std::cmp::{max, min}; use std::convert::Infallible; use std::marker::PhantomData; @@ -238,8 +238,8 @@ where #[cfg(test)] mod tests { - use crate::segtree::Max; - use crate::Segtree; + use super::super::Segtree; + use super::Max; #[test] fn test_max_segtree() { diff --git a/src/twosat.rs b/src/twosat.rs index 6a506c4..64f3795 100644 --- a/src/twosat.rs +++ b/src/twosat.rs @@ -1,4 +1,4 @@ -use crate::internal_scc; +use super::internal_scc; pub struct TwoSat { n: usize, From 3868127abadcee898e5d0824ed50bd369b04dc67 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sun, 27 Sep 2020 01:22:19 +0900 Subject: [PATCH 2/3] Get rid of `crate` and `$crate` --- src/convolution.rs | 8 ++++---- src/lazysegtree.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/convolution.rs b/src/convolution.rs index 91b7b33..d084e3a 100644 --- a/src/convolution.rs +++ b/src/convolution.rs @@ -8,9 +8,9 @@ macro_rules! modulus { const VALUE: u32 = $name as _; const HINT_VALUE_IS_PRIME: bool = true; - fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option<$crate::modint::ButterflyCache>>> { + fn butterfly_cache() -> &'static ::std::thread::LocalKey<::std::cell::RefCell<::std::option::Option>>> { thread_local! { - static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option<$crate::modint::ButterflyCache<$name>>> = ::std::default::Default::default(); + static BUTTERFLY_CACHE: ::std::cell::RefCell<::std::option::Option>> = ::std::default::Default::default(); } &BUTTERFLY_CACHE } @@ -21,7 +21,7 @@ macro_rules! modulus { use super::{ internal_bit, internal_math, - modint::{ButterflyCache, Modulus, RemEuclidU32, StaticModInt}, + modint::{self, ButterflyCache, Modulus, RemEuclidU32, StaticModInt}, }; use std::{ cmp, @@ -232,7 +232,7 @@ fn prepare() -> ButterflyCache { #[cfg(test)] mod tests { - use super::super::modint::{Mod998244353, Modulus, RemEuclidU32, StaticModInt}; + use super::super::modint::{self, Mod998244353, Modulus, RemEuclidU32, StaticModInt}; use rand::{rngs::ThreadRng, Rng as _}; use std::{ convert::{TryFrom, TryInto as _}, diff --git a/src/lazysegtree.rs b/src/lazysegtree.rs index 540fbab..959fabf 100644 --- a/src/lazysegtree.rs +++ b/src/lazysegtree.rs @@ -1,5 +1,5 @@ use super::internal_bit::ceil_pow2; -use super::Monoid; +use super::segtree::Monoid; pub trait MapMonoid { type M: Monoid; From 2cb2d70b8350d43601b30c1ee56d7512be860ebb Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Tue, 29 Sep 2020 18:38:52 +0900 Subject: [PATCH 3/3] Create `prelude` module and move the re-exported items to it --- examples/practice2_d_maxflow.rs | 2 +- examples/practice2_j_segment_tree.rs | 2 +- .../practice2_k_range_affine_range_sum.rs | 2 +- examples/practice2_l_lazy_segment_tree.rs | 2 +- src/lib.rs | 20 +------------------ src/prelude.rs | 20 +++++++++++++++++++ src/segtree.rs | 2 +- 7 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 src/prelude.rs diff --git a/examples/practice2_d_maxflow.rs b/examples/practice2_d_maxflow.rs index 1e987bd..e0e49bd 100644 --- a/examples/practice2_d_maxflow.rs +++ b/examples/practice2_d_maxflow.rs @@ -1,4 +1,4 @@ -use ac_library_rs::MfGraph; +use ac_library_rs::prelude::*; use std::io::Read; #[allow(clippy::many_single_char_names)] diff --git a/examples/practice2_j_segment_tree.rs b/examples/practice2_j_segment_tree.rs index ed5d043..5c5f54d 100644 --- a/examples/practice2_j_segment_tree.rs +++ b/examples/practice2_j_segment_tree.rs @@ -1,4 +1,4 @@ -use ac_library_rs::{Max, Segtree}; +use ac_library_rs::prelude::*; use std::io::Read; fn main() { diff --git a/examples/practice2_k_range_affine_range_sum.rs b/examples/practice2_k_range_affine_range_sum.rs index e07c542..408e026 100644 --- a/examples/practice2_k_range_affine_range_sum.rs +++ b/examples/practice2_k_range_affine_range_sum.rs @@ -1,4 +1,4 @@ -use ac_library_rs::{LazySegtree, MapMonoid, ModInt998244353, Monoid}; +use ac_library_rs::prelude::*; use std::io::Read; type Mint = ModInt998244353; diff --git a/examples/practice2_l_lazy_segment_tree.rs b/examples/practice2_l_lazy_segment_tree.rs index 61469d4..a6999a8 100644 --- a/examples/practice2_l_lazy_segment_tree.rs +++ b/examples/practice2_l_lazy_segment_tree.rs @@ -1,5 +1,5 @@ #![allow(clippy::many_single_char_names)] -use ac_library_rs::{LazySegtree, MapMonoid, Monoid}; +use ac_library_rs::prelude::*; use std::io::Read; use std::iter; diff --git a/src/lib.rs b/src/lib.rs index 5452b25..3681a43 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,6 +6,7 @@ pub mod math; pub mod maxflow; pub mod mincostflow; pub mod modint; +pub mod prelude; pub mod scc; pub mod segtree; pub mod string; @@ -16,22 +17,3 @@ pub(crate) mod internal_math; pub(crate) mod internal_queue; pub(crate) mod internal_scc; pub(crate) mod internal_type_traits; - -pub use convolution::{convolution, convolution_i64}; -pub use dsu::Dsu; -pub use fenwicktree::FenwickTree; -pub use lazysegtree::{LazySegtree, MapMonoid}; -pub use math::{crt, floor_sum, inv_mod, pow_mod}; -pub use maxflow::{Edge, MfGraph}; -pub use mincostflow::MinCostFlowGraph; -pub use modint::{ - Barrett, ButterflyCache, DefaultId, DynamicModInt, Id, Mod1000000007, Mod998244353, ModInt, - ModInt1000000007, ModInt998244353, Modulus, RemEuclidU32, StaticModInt, -}; -pub use scc::SccGraph; -pub use segtree::{Additive, Max, Min, Monoid, Multiplicative, Segtree}; -pub use string::{ - lcp_array, lcp_array_arbitrary, suffix_array, suffix_array_arbitrary, suffix_array_manual, - z_algorithm, z_algorithm_arbitrary, -}; -pub use twosat::TwoSat; diff --git a/src/prelude.rs b/src/prelude.rs new file mode 100644 index 0000000..14e7920 --- /dev/null +++ b/src/prelude.rs @@ -0,0 +1,20 @@ +pub use super::{ + convolution::{convolution, convolution_i64}, + dsu::Dsu, + fenwicktree::FenwickTree, + lazysegtree::{LazySegtree, MapMonoid}, + math::{crt, floor_sum, inv_mod, pow_mod}, + maxflow::{Edge, MfGraph}, + mincostflow::MinCostFlowGraph, + modint::{ + Barrett, ButterflyCache, DynamicModInt, Id, Mod1000000007, Mod998244353, ModInt, + ModInt1000000007, ModInt998244353, Modulus, StaticModInt, + }, + scc::SccGraph, + segtree::{Additive, Max, Min, Monoid, Multiplicative, Segtree}, + string::{ + lcp_array, lcp_array_arbitrary, suffix_array, suffix_array_arbitrary, suffix_array_manual, + z_algorithm, z_algorithm_arbitrary, + }, + twosat::TwoSat, +}; diff --git a/src/segtree.rs b/src/segtree.rs index 9d6b820..64737f7 100644 --- a/src/segtree.rs +++ b/src/segtree.rs @@ -238,7 +238,7 @@ where #[cfg(test)] mod tests { - use super::super::Segtree; + use super::super::segtree::Segtree; use super::Max; #[test]