Skip to content

swizzard/disjoint-ranges

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

disjoint-ranges

docs.rs Crates.io License

What

A library providing disjoint ranges, i.e. ranges with gaps in them.

// checked range creation, ensure low <= high
assert!(DisjointRange::new_single_range(40u8, 10).is_none());

// `_unchecked` alternatives for creation methods
let range = DisjointRange::new_single_range_unchecked('a', 'f');

// check membership
assert!(&range.contains(&'c'));
assert!(!&range.contains(&'h'));
assert!(!&range.contains(&'s'));

// add
let range = DisjointRange::new_single_range_unchecked('a', 'f');
let added = range.add_unary_range(UnaryRange::new_unchecked('q', 'z'));
assert!(&added.contains(&'s'));
assert!(!&range.contains(&'h'));

// subtract
let range = DisjointRange::new_single_range_unchecked(60u8, 120u8);
assert!(!&added.contains(45));
assert!(&added.contains(85));
assert!(&added.contains(95));

range.subtract_unary_range(UnaryRange::new_unchecked(40, 90));
assert!(!&range.contains(45));
assert!(!&range.contains(85));
assert!(&range.contains(95));

// complement
let range = DisjointRange::new_single_range_unchecked(60u16, 120u16);
assert!(&range.contains(70));
assert!(!&range.contains(59));
assert!(!&range.contains(123));

let comp = range.complement();
assert!(!&range.contains(70));
assert!(&range.contains(59));
assert!(&range.contains(123))

// iterate over subranges
let range = DisjointRange::from_bounds_unchecked([(0u8, 9), (20, 40), (90, 120)]);
for subrange in range.iter_ranges() {
    let (low, high) = subrange.as_bounds();
    println!("low {} high {}", low, high);
// prints
// low 0 high 9
// low 20 high 40
// low 90 high 120

Who

Sam Raker

No LLMs or similar "AI" technologies have been used in the making of this library.

About

disjoint ranges

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages