From 3b95af9a1887a07070f7b7918ce3cc91fb911918 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 24 Dec 2024 14:37:26 +0000 Subject: [PATCH] move stream width related into unit Signed-off-by: Jason Volk --- src/core/utils/stream/band.rs | 26 ++++++++++++++++++++++++++ src/core/utils/stream/mod.rs | 31 ++----------------------------- 2 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 src/core/utils/stream/band.rs diff --git a/src/core/utils/stream/band.rs b/src/core/utils/stream/band.rs new file mode 100644 index 00000000..76f2a85a --- /dev/null +++ b/src/core/utils/stream/band.rs @@ -0,0 +1,26 @@ +use std::sync::atomic::{AtomicUsize, Ordering}; + +/// Stream concurrency factor; this is a live value. +static WIDTH: AtomicUsize = AtomicUsize::new(32); + +/// Practicable limits on the stream width +pub const WIDTH_LIMIT: (usize, usize) = (1, 1024); + +/// Sets the live concurrency factor. The first return value is the previous +/// width which was replaced. The second return value is the value which was set +/// after any applied limits. +pub fn set_width(width: usize) -> (usize, usize) { + let width = width.clamp(WIDTH_LIMIT.0, WIDTH_LIMIT.1); + (WIDTH.swap(width, Ordering::Relaxed), width) +} + +/// Used by stream operations where the concurrency factor hasn't been manually +/// supplied by the caller (most uses). Instead we provide a default value which +/// is adjusted at startup for the specific system and also dynamically. +#[inline] +pub fn automatic_width() -> usize { + let width = WIDTH.load(Ordering::Relaxed); + debug_assert!(width >= WIDTH_LIMIT.0, "WIDTH should not be zero"); + debug_assert!(width <= WIDTH_LIMIT.1, "WIDTH is probably too large"); + width +} diff --git a/src/core/utils/stream/mod.rs b/src/core/utils/stream/mod.rs index 4456784f..a5ef17c5 100644 --- a/src/core/utils/stream/mod.rs +++ b/src/core/utils/stream/mod.rs @@ -1,3 +1,4 @@ +mod band; mod broadband; mod cloned; mod expect; @@ -9,6 +10,7 @@ mod try_broadband; mod try_ready; mod wideband; +pub use band::{automatic_width, set_width, WIDTH_LIMIT}; pub use broadband::BroadbandExt; pub use cloned::Cloned; pub use expect::TryExpect; @@ -19,32 +21,3 @@ pub use tools::Tools; pub use try_broadband::TryBroadbandExt; pub use try_ready::TryReadyExt; pub use wideband::WidebandExt; - -/// Stream concurrency factor; this is a live value. -static WIDTH: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(32); - -/// Practicable limits on the stream width -pub const WIDTH_LIMIT: (usize, usize) = (1, 1024); - -/// Sets the live concurrency factor. The first return value is the previous -/// width which was replaced. The second return value is the value which was set -/// after any applied limits. -pub fn set_width(width: usize) -> (usize, usize) { - use std::sync::atomic::Ordering; - - let width = width.clamp(WIDTH_LIMIT.0, WIDTH_LIMIT.1); - (WIDTH.swap(width, Ordering::Relaxed), width) -} - -/// Used by stream operations where the concurrency factor hasn't been manually -/// supplied by the caller (most uses). Instead we provide a default value which -/// is adjusted at startup for the specific system and also dynamically. -#[inline] -pub fn automatic_width() -> usize { - use std::sync::atomic::Ordering; - - let width = WIDTH.load(Ordering::Relaxed); - debug_assert!(width >= WIDTH_LIMIT.0, "WIDTH should not be zero"); - debug_assert!(width <= WIDTH_LIMIT.1, "WIDTH is probably too large"); - width -}