#interval #range #fundamental #general-purpose #adapter #closed #open

no-std winterval

为区间(范围)的开放/封闭实现提供适配器

10 个不稳定版本 (3 个破坏性更新)

0.3.0 2023年10月28日
0.2.3 2023年10月17日
0.1.5 2022年6月12日
0.1.3 2022年5月26日
0.0.1 2021年12月21日

#6#closed

Download history 3486/week @ 2024-03-13 2768/week @ 2024-03-20 577/week @ 2024-03-27 718/week @ 2024-04-03 531/week @ 2024-04-10 381/week @ 2024-04-17 658/week @ 2024-04-24 822/week @ 2024-05-01 1368/week @ 2024-05-08 840/week @ 2024-05-15 419/week @ 2024-05-22 1264/week @ 2024-05-29 515/week @ 2024-06-05 326/week @ 2024-06-12 187/week @ 2024-06-19 165/week @ 2024-06-26

1,308 每月下载量
32 仓库中使用 (直接使用2个)

MIT 许可证

29KB
517

模块 :: winterval

experimental rust-status docs.rs Open in Gitpod discord

整数区间适配器,适用于 Range 和 RangeInclusive。

假设你有一个应该接受区间的函数,但你不想限制函数的调用者只能使用半开区间 core::ops::Range 或闭区间 core::ops::RangeInclusive,你想允许使用任何可迭代区间。为了使它顺利运行,请使用 IterableInterval。两者都实现了该特质,也可以与非可迭代区间一起使用,如 ( -Infinity .. +Infinity )。

基本用法。


use winterval::IterableInterval;

fn f1( interval : impl IterableInterval )
{
  for i in interval
  {
    println!( "{i}" );
  }
}

// Calling the function either with
// half-open interval `core::ops::Range`.
f1( 0..=3 );
// Or closed one `core::ops::RangeInclusive`.
f1( 0..4 );

更多灵活性

如果你需要更多定义区间的灵活性,你可以将端点的元组转换为区间。


use winterval::{ IterableInterval, IntoInterval, Bound };

fn f1( interval : impl IterableInterval )
{
  for i in interval
  {
    println!( "{i}" );
  }
}

// Calling the function either with
// half-open interval `core::ops::Range`.
f1( 0..=3 );
// Or closed one `core::ops::RangeInclusive`.
f1( 0..4 );
// Alternatively you construct your custom interval from a tuple.
f1( ( 0, 3 ).into_interval() );
f1( ( Bound::Included( 0 ), Bound::Included( 3 ) ).into_interval() );
// All the calls to the function `f1`` perform the same task,
// and the output is exactly identical.

非可迭代区间

你也可以使用此库来指定非可迭代区间。非可迭代区间有一个或多个未绑定的端点。例如,区间 core::ops::RangeFull 没有边界,表示从负无穷大到正无穷大的范围。


use winterval::{ NonIterableInterval, IntoInterval, Bound };

fn f1( interval : impl NonIterableInterval )
{
  println!( "Do something with this {:?} .. {:?} interval", interval.left(), interval.right() );
}

// Iterable/bound interval from tuple.
f1( ( Bound::Included( 0 ), Bound::Included( 3 ) ).into_interval() );
// Non-iterable/unbound interval from tuple.
f1( ( Bound::Included( 0 ), Bound::Unbounded ).into_interval() );
// Non-iterable/unbound interval from `core::ops::RangeFrom`.
f1( 0.. );
// Non-iterable/unbound interval from `core::ops::RangeFull`
// what is ( -Infinity .. +Infinity ).
f1( .. );

添加到你的项目中

cargo add interval_adaptor

从仓库中尝试

git clone https://github.com/Wandalen/wTools
cd wTools
cargo run --example winterval_trivial

依赖项