Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 68 additions & 44 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ readme = "README.md"
documentation = "https://docs.rs/iprange/"
categories = ["network-programming"]
license = "MIT"
edition = "2024"

[dependencies]
ipnet = { version = "2", optional = true }
Expand All @@ -18,5 +19,5 @@ serde = { version = "1", features = ["derive"], optional = true }
default = ["ipnet"]

[dev-dependencies]
rand = "0.3.17"
bincode = "1"
rand = "0.9.2"
bincode = "1.3.3"
15 changes: 9 additions & 6 deletions benches/bench.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
#![feature(test)]

extern crate ipnet;
extern crate iprange;
extern crate rand;
extern crate test;

use ipnet::{Ipv4Net, Ipv6Net};
use iprange::*;
use rand::{Rng, SeedableRng, StdRng};
use rand::{RngCore, SeedableRng, rngs::StdRng};
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::net::{Ipv4Addr, Ipv6Addr};
Expand Down Expand Up @@ -50,12 +47,18 @@ fn chnlists_v6() -> Vec<String> {
}

fn rand_ipv4_list(n: usize) -> Vec<Ipv4Addr> {
let mut rng = StdRng::from_seed(&[1926, 8, 17]);
let mut rng = StdRng::from_seed([
19, 26, 8, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,
]);
(0..n).map(|_| rng.next_u32().into()).collect()
}

fn rand_ipv6_list(n: usize) -> Vec<Ipv6Addr> {
let mut rng = StdRng::from_seed(&[1926, 8, 17]);
let mut rng = StdRng::from_seed([
19, 26, 8, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,
]);
(0..n)
.map(|_| {
let mut buf = [0u8; 16];
Expand Down
4 changes: 2 additions & 2 deletions src/ipnet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ impl TraverseState for Ipv4TraverseState {

#[inline]
fn build(&self) -> Self::Net {
Ipv4Net::new(self.prefix.into(), self.prefix_len as u8).unwrap()
Ipv4Net::new(self.prefix.into(), self.prefix_len).unwrap()
}
}

Expand Down Expand Up @@ -218,7 +218,7 @@ impl TraverseState for Ipv6TraverseState {

#[inline]
fn build(&self) -> Self::Net {
Ipv6Net::new(self.prefix.into(), self.prefix_len as u8).unwrap()
Ipv6Net::new(self.prefix.into(), self.prefix_len).unwrap()
}
}

Expand Down
17 changes: 4 additions & 13 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,8 @@
//! [`intersect`]: struct.IpRange.html#method.intersect
//! [`exclude`]: struct.IpRange.html#method.exclude

#[cfg(feature = "ipnet")]
extern crate ipnet;
#[cfg(feature = "ipnetwork")]
extern crate ipnetwork;
#[cfg(feature = "serde")]
#[macro_use]
extern crate serde;
use serde::{Deserialize, Serialize};

use std::collections::VecDeque;
use std::fmt;
Expand Down Expand Up @@ -203,7 +198,7 @@ impl<N: IpNet> IpRange<N> {
///
/// The returned `IpRange` is simplified.
pub fn merge(&self, other: &IpRange<N>) -> Self {
self.into_iter().chain(other.into_iter()).collect()
self.into_iter().chain(other).collect()
}

/// Returns a new `IpRange` which contains all networks
Expand Down Expand Up @@ -244,7 +239,7 @@ impl<N: IpNet> IpRange<N> {
}

/// Returns the iterator to `&self`.
pub fn iter(&self) -> IpRangeIter<N> {
pub fn iter(&self) -> IpRangeIter<'_, N> {
self.into_iter()
}
}
Expand Down Expand Up @@ -492,11 +487,7 @@ where
}
}

if node.is_leaf() {
Some(network)
} else {
None
}
if node.is_leaf() { Some(network) } else { None }

// The commented code below is more clear. However, this uses a
// commented method `search` in IpTrieNode, and the performance
Expand Down