pub struct IpRange<T: RangeFamily> { /* private fields */ }Expand description
A generic IP address range.
Use IPv4 or IPv6 markers to specify the IP version.
IpRange::new creates inclusive numeric ranges. When the second argument
is present, it is a closing address, not a netmask. Use CIDR input or convert
dotted netmask input with ipv4::subnet2block before constructing a range.
The internal length counters are u32 (IPv4) and u128 (IPv6). A range that
spans the entire address space cannot be represented because its length is
one larger than the address type can hold, so construction returns an error.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("192.168.0.0/24", "")?;
assert_eq!(range.len(), 256);Implementations§
Source§impl<T: RangeFamily> IpRange<T>
impl<T: RangeFamily> IpRange<T>
Sourcepub fn new(start: &str, end: &str) -> Result<IpRange<T>>
pub fn new(start: &str, end: &str) -> Result<IpRange<T>>
Creates a new IP range.
start accepts a single IP ("10.0.0.1") or a CIDR ("10.0.0.0/24").
Pass an empty end when start already describes the whole range or
when you want a single-address range.
When end is non-empty, the two arguments are inclusive bounds: start
is the lower endpoint and end is the upper endpoint. The constructor
does not treat end as a dotted netmask. For example,
IpRange::<IPv4>::new("10.42.120.90", "255.255.252.0") spans every
address from 10.42.120.90 through 255.255.252.0; it does not create
the subnet 10.42.120.90/255.255.252.0. If you have an address plus
netmask, convert it to CIDR or concrete block bounds first.
Note: Unlike the Python iptools library, reversed bounds are rejected
rather than normalized.
§Examples
use iptools::{iprange::{IpRange, IPv4}, ipv4};
let r1 = IpRange::<IPv4>::new("10.0.0.1", "10.0.0.5")?;
let r2 = IpRange::<IPv4>::new("192.168.1.0/24", "")?;
// If you have an address + dotted netmask pair, normalize it first.
let block = ipv4::subnet2block("10.42.120.90/255.255.252.0").unwrap();
let cidr = IpRange::<IPv4>::new("10.42.120.0/22", "")?;
let explicit = IpRange::<IPv4>::new(&block.0, &block.1)?;
assert_eq!(cidr.len(), explicit.len());Sourcepub fn from_bounds(start_ip: T::Addr, end_ip: T::Addr) -> Result<IpRange<T>>
pub fn from_bounds(start_ip: T::Addr, end_ip: T::Addr) -> Result<IpRange<T>>
Creates a new IP range from inclusive raw numeric bounds.
This skips all string parsing and is the fastest constructor when callers already have numeric addresses.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::from_bounds(0x0a00_0000, 0x0a00_00ff)?;
assert_eq!(range.len(), 256);Sourcepub fn from_addr_prefix(addr: T::Addr, prefix: u8) -> Result<IpRange<T>>
pub fn from_addr_prefix(addr: T::Addr, prefix: u8) -> Result<IpRange<T>>
Creates a new IP range from a raw numeric address and CIDR prefix.
This computes the containing CIDR block without parsing or formatting any strings.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::from_addr_prefix(0x0a00_0102, 16)?;
assert_eq!(range.bounds(), (0x0a00_0000, 0x0a00_ffff));Sourcepub fn get_range(&self) -> (String, String)
pub fn get_range(&self) -> (String, String)
Returns the start and end IP addresses as strings.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("192.168.1.0/24", "")?;
assert_eq!(range.get_range(), ("192.168.1.0".to_string(), "192.168.1.255".to_string()));Sourcepub fn bounds(&self) -> (T::Addr, T::Addr)
pub fn bounds(&self) -> (T::Addr, T::Addr)
Returns the raw numeric bounds of this range.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("10.0.0.1", "10.0.0.5")?;
assert_eq!(range.bounds().1 - range.bounds().0, 4);pub fn get_version(&self) -> IpVer
Sourcepub fn len(&self) -> T::Addr
pub fn len(&self) -> T::Addr
Returns the total number of IP addresses in this range.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("192.168.1.0/24", "")?;
assert_eq!(range.len(), 256);Sourcepub fn remaining(&self) -> T::Addr
pub fn remaining(&self) -> T::Addr
Returns the number of IP addresses remaining in the iteration.
§Examples
use iptools::iprange::{IpRange, IPv4};
let mut range = IpRange::<IPv4>::new("10.0.0.1", "10.0.0.5")?;
assert_eq!(range.remaining(), 5);
range.next();
assert_eq!(range.remaining(), 4);Sourcepub fn next_addr(&mut self) -> Option<T::Addr>
pub fn next_addr(&mut self) -> Option<T::Addr>
Returns the next address as a numeric value without string allocation.
Sourcepub fn for_each_addr<F>(&self, f: F)
pub fn for_each_addr<F>(&self, f: F)
Iterates over raw numeric addresses without allocating intermediate strings.
Sourcepub fn contains(&self, ip: &str) -> Result<bool>
pub fn contains(&self, ip: &str) -> Result<bool>
Checks whether an IP address or CIDR block sits fully inside this range.
contains performs a straight numeric comparison against this range’s
existing inclusive bounds. The requested IP, or both endpoints of the
requested CIDR block, must fall inside the range. Nothing else is
inferred from how the range was constructed.
When you already have parsed numeric values (e.g., from std::net::Ipv4Addr
or std::net::Ipv6Addr), use IpRange::contains_addr or
IpRange::contains_range to skip the parsing overhead.
For strict same-family string parsing with mismatch-as-error semantics,
use contains_strict on IpRange<IPv4> or IpRange<IPv6>.
Valid targets from the other IP family return Ok(false), except that
IPv4 ranges accept IPv4-mapped IPv6 targets such as ::ffff:192.0.2.1.
This matters when the range was created from two strings. For example,
IpRange::<IPv4>::new("10.42.120.90", "255.255.252.0") means every
address from 10.42.120.90 through 255.255.252.0, so it contains
192.168.44.10. To model 10.42.120.90/255.255.252.0, convert the
subnet to its real block bounds as shown below. The same inclusive-bound
rule applies to IPv6: IpRange::<IPv6>::new("fd00:10::", "fd00:ffff::")
contains fd00:8000::1; use CIDR input such as "fd00:10::/64" when
you want IPv6 subnet semantics.
§Examples
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("192.168.1.0/24", "")?;
assert!(range.contains("192.168.1.100")?);
assert!(range.contains("192.168.1.0/25")?);use iptools::{iprange::{IpRange, IPv4}, ipv4};
let range = IpRange::<IPv4>::new("192.168.1.0/24", "")?;
let addr = ipv4::ip2long("192.168.1.100")?;
assert!(range.contains_addr(addr));use iptools::{iprange::{IpRange, IPv4}, ipv4};
let prefix = ipv4::netmask2prefix("255.255.255.128");
let cidr = format!("{}/{}", "198.51.100.17", prefix);
let subnet = IpRange::<IPv4>::new(&cidr, "")?;
assert!(subnet.contains("198.51.100.100")?);
assert!(!subnet.contains("203.0.113.1")?);use iptools::{iprange::{IpRange, IPv4}, ipv4};
let bounded_range = IpRange::<IPv4>::new("10.42.120.90", "255.255.252.0")?;
assert!(bounded_range.contains("192.168.44.10")?);
let block = ipv4::subnet2block("10.42.120.90/255.255.252.0").unwrap();
let subnet = IpRange::<IPv4>::new(&block.0, &block.1)?;
assert!(!subnet.contains("192.168.44.10")?);use iptools::iprange::{IpRange, IPv6};
let bounded_range = IpRange::<IPv6>::new("fd00:10::", "fd00:ffff::")?;
assert!(bounded_range.contains("fd00:8000::1")?);
let subnet = IpRange::<IPv6>::new("fd00:10::/64", "")?;
assert!(!subnet.contains("fd00:8000::1")?);Sourcepub fn contains_addr(&self, addr: T::Addr) -> bool
pub fn contains_addr(&self, addr: T::Addr) -> bool
Checks whether a numeric address sits inside this range.
Sourcepub fn contains_range(&self, start: T::Addr, end: T::Addr) -> bool
pub fn contains_range(&self, start: T::Addr, end: T::Addr) -> bool
Checks whether the inclusive numeric bounds sit inside this range.
Sourcepub fn is_reserved(ip: &str) -> Result<bool>
pub fn is_reserved(ip: &str) -> Result<bool>
Checks if an IP address or range falls within reserved IP blocks (e.g., loopback, private).
§Examples
use iptools::iprange::{IpRange, IPv4};
assert!(IpRange::<IPv4>::is_reserved("127.0.0.1")?);
assert!(IpRange::<IPv4>::is_reserved("192.168.1.1")?);
assert!(!IpRange::<IPv4>::is_reserved("8.8.8.8")?);Source§impl<T: RangeFamily> IpRange<T>
impl<T: RangeFamily> IpRange<T>
Sourcepub fn addrs(&self) -> AddrIterator<T> ⓘ
pub fn addrs(&self) -> AddrIterator<T> ⓘ
Returns an iterator over raw IP addresses.
§Example
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("10.0.0.1", "10.0.0.5")?;
assert_eq!(range.addrs().count(), 5);Sourcepub fn addrs_view(&self) -> AddrViewIterator<T> ⓘ
pub fn addrs_view(&self) -> AddrViewIterator<T> ⓘ
Returns an iterator over AddrView wrappers (numeric value + on-demand formatting).
§Example
use iptools::iprange::{IpRange, IPv4};
let range = IpRange::<IPv4>::new("10.0.0.1", "10.0.0.2")?;
let views = range.addrs_view().collect::<Vec<_>>();
assert_eq!(views[0].raw(), 167772161);
assert_eq!(views[1].to_ip_string(), "10.0.0.2");Source§impl IpRange<IPv4>
impl IpRange<IPv4>
Sourcepub fn contains_strict(&self, target: &str) -> Result<bool>
pub fn contains_strict(&self, target: &str) -> Result<bool>
Fast-path strict containment for IPv4 string targets (single IP or CIDR).
This avoids cross-family auto-detection and parses only IPv4 syntax.
Unlike IpRange::contains, family-mismatched input returns an error.
Sourcepub fn for_each_ip_str<F>(&self, f: F)
pub fn for_each_ip_str<F>(&self, f: F)
Iterates over formatted IPv4 addresses using one reused scratch string.
The &str passed to the callback is valid only for the duration of that
callback invocation. Use this when you need textual addresses but want
to avoid allocating a new String for every address.
Source§impl IpRange<IPv6>
impl IpRange<IPv6>
Sourcepub fn contains_strict(&self, target: &str) -> Result<bool>
pub fn contains_strict(&self, target: &str) -> Result<bool>
Fast-path strict containment for IPv6 string targets (single IP or CIDR).
This avoids cross-family auto-detection and parses only IPv6 syntax.
Unlike IpRange::contains, family-mismatched input returns an error.
Sourcepub fn for_each_ip_str<F>(&self, f: F)
pub fn for_each_ip_str<F>(&self, f: F)
Iterates over formatted IPv6 addresses using one reused scratch string.
The &str passed to the callback is valid only for the duration of that
callback invocation. Use this when you need textual addresses but want
to avoid allocating a new String for every address.
Source§impl IpRange<IPv4>
impl IpRange<IPv4>
Sourcepub fn contains_ipv4(&self, addr: StdIpv4Addr) -> bool
pub fn contains_ipv4(&self, addr: StdIpv4Addr) -> bool
Checks whether a std::net::Ipv4Addr lies inside this IPv4 range.
Sourcepub fn contains_ipv4_bounds(&self, start: StdIpv4Addr, end: StdIpv4Addr) -> bool
pub fn contains_ipv4_bounds(&self, start: StdIpv4Addr, end: StdIpv4Addr) -> bool
Checks whether the inclusive std::net::Ipv4Addr bounds lie inside this range.
Sourcepub fn contains_ipaddr(&self, addr: StdIpAddr) -> bool
pub fn contains_ipaddr(&self, addr: StdIpAddr) -> bool
Checks whether a std::net::IpAddr lies inside this IPv4 range.
Source§impl IpRange<IPv6>
impl IpRange<IPv6>
Sourcepub fn contains_ipv6(&self, addr: StdIpv6Addr) -> bool
pub fn contains_ipv6(&self, addr: StdIpv6Addr) -> bool
Checks whether a std::net::Ipv6Addr lies inside this IPv6 range.
Sourcepub fn contains_ipv6_bounds(&self, start: StdIpv6Addr, end: StdIpv6Addr) -> bool
pub fn contains_ipv6_bounds(&self, start: StdIpv6Addr, end: StdIpv6Addr) -> bool
Checks whether the inclusive std::net::Ipv6Addr bounds lie inside this range.
Sourcepub fn contains_ipaddr(&self, addr: StdIpAddr) -> bool
pub fn contains_ipaddr(&self, addr: StdIpAddr) -> bool
Checks whether a std::net::IpAddr lies inside this IPv6 range.
Trait Implementations§
Source§impl ExactSizeIterator for IpRange<IPv4>
impl ExactSizeIterator for IpRange<IPv4>
Source§impl<T: RangeFamily> Hash for IpRange<T>
impl<T: RangeFamily> Hash for IpRange<T>
Source§impl<T: RangeFamily> Iterator for IpRange<T>
impl<T: RangeFamily> Iterator for IpRange<T>
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
Source§fn count(self) -> usize
fn count(self) -> usize
Source§fn last(self) -> Option<Self::Item>
fn last(self) -> Option<Self::Item>
Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read moreSource§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read moreSource§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by)n elements. Read more1.28.0 (const: unstable) · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 (const: unstable) · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 (const: unstable) · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse)separator between items
of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse)separator
between items of the original iterator. Read more1.0.0 (const: unstable) · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.21.0 (const: unstable) · Source§fn for_each<F>(self, f: F)
fn for_each<F>(self, f: F)
1.0.0 (const: unstable) · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 (const: unstable) · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 (const: unstable) · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 (const: unstable) · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 (const: unstable) · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 (const: unstable) · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 (const: unstable) · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n elements. Read more1.0.0 (const: unstable) · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 (const: unstable) · Source§fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
1.0.0 (const: unstable) · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 (const: unstable) · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows)f for each contiguous window of size N over
self and returns an iterator over the outputs of f. Like slice::windows(),
the windows during mapping overlap as well. Read more1.0.0 (const: unstable) · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 (const: unstable) · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read more1.0.0 (const: unstable) · Source§fn collect<B>(self) -> B
fn collect<B>(self) -> B
Source§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 (const: unstable) · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 (const: unstable) · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 (const: unstable) · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.51.0 (const: unstable) · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 (const: unstable) · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 (const: unstable) · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 (const: unstable) · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 (const: unstable) · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 (const: unstable) · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 (const: unstable) · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 (const: unstable) · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 (const: unstable) · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 (const: unstable) · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 (const: unstable) · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 (const: unstable) · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 (const: unstable) · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 (const: unstable) · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
1.0.0 (const: unstable) · Source§fn cycle(self) -> Cycle<Self>
fn cycle(self) -> Cycle<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 (const: unstable) · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 (const: unstable) · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd elements of
this Iterator with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 (const: unstable) · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 (const: unstable) · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 (const: unstable) · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 (const: unstable) · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator are lexicographically
greater than or equal to those of another. Read more