Skip to content

Traits extending the Rust Range structs in std::ops

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

rsnively/rangetools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rangetools

Traits extending the Rust Range structs in std::ops

Usage

Add this to your Cargo.toml:

[dependencies]
rangetools = "0.1"

How to use in your crate:

use rangetools::Rangetools;

This provides new methods on all of the std::ops range types, as well as any types introduced in this crate to manage the outputs of such methods.

let i = (0..5).intersection(3..);
assert!(i.contains(4));

let i2 = (0..5).intersection(5..10);
assert!(i2.is_empty());

Wherever possible (when the result is lower-bounded), the resulting types of these operations implement IntoIterator so that more operations can be performed on them.

let u1 = (1..3).union(5..7);
assert_eq!(u1.into_iter().collect::<Vec<_>>(), vec![1, 2, 5, 6]);

let u2 = (1..3).union(10..);
assert_eq!(u2.into_iter().take(5).collect::<Vec<_>>(), vec![1, 2, 10, 11, 12]);

let c = (1..3).complement();
let i = c.into_iter(); // Compiler error! The result has no lower bound
                       // and thus cannot be iterated over.

Features

The serde feature provides derives for serde's Serialize and Deserialize traits.

License

Licensed under the Apache License, Version 2.0 or the MIT license, at your option.

About

Traits extending the Rust Range structs in std::ops

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages