From 2b0baf2e8641d4fda3b3e126a75f819949af7246 Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Mon, 6 Mar 2023 10:16:56 +0100 Subject: [PATCH 1/8] Add geo::HasKernel for OrderedFloat --- src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index b34de94..4319879 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2249,3 +2249,14 @@ mod impl_bytemuck { assert!(try_cast::>(pi).is_ok()); } } + +#[cfg(feature = "geo")] +mod impl_geo { + use super::{Float, OrderedFloat}; + use geo::kernels::{RobustKernel, HasKernel}; + use geo::CoordNum; + + impl HasKernel for OrderedFloat { + type Ker = RobustKernel; + } +} From ec96347ba0a086b0458cea2f1a98721e169aa6ad Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Mon, 6 Mar 2023 10:24:06 +0100 Subject: [PATCH 2/8] Add geo to dependencies --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index ad08ba7..399a60f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ arbitrary = { version = "1.0.0", optional = true } proptest = { version = "1.0.0", optional = true } speedy = { version = "0.8.3", optional = true, default-features = false } bytemuck = { version = "1.12.2", optional = true, default-features = false } +geo = { version = "0.23", optional = true } [dev-dependencies] serde_test = "1.0" From 1ecc6ec06d0e64665b094eaa9de89d3c061a7b92 Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Mon, 6 Mar 2023 10:24:58 +0100 Subject: [PATCH 3/8] Run cargo fmt --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 4319879..6e7ef86 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2253,7 +2253,7 @@ mod impl_bytemuck { #[cfg(feature = "geo")] mod impl_geo { use super::{Float, OrderedFloat}; - use geo::kernels::{RobustKernel, HasKernel}; + use geo::kernels::{HasKernel, RobustKernel}; use geo::CoordNum; impl HasKernel for OrderedFloat { From e005978c8b85c60c65e36e435254c80d0bf57f1d Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Thu, 9 Mar 2023 17:21:35 +0100 Subject: [PATCH 4/8] Bump geo version to 0.24 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 399a60f..79c4d5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ arbitrary = { version = "1.0.0", optional = true } proptest = { version = "1.0.0", optional = true } speedy = { version = "0.8.3", optional = true, default-features = false } bytemuck = { version = "1.12.2", optional = true, default-features = false } -geo = { version = "0.23", optional = true } +geo = { version = "0.24", optional = true } [dev-dependencies] serde_test = "1.0" From 792016f4b52012112518a592f6573a17b1a52683 Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Thu, 9 Mar 2023 19:04:16 +0100 Subject: [PATCH 5/8] Rename #[allow] of clippy lint --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 6e7ef86..23a95f5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -974,7 +974,7 @@ impl Ord for NotNan { } } -#[allow(clippy::derive_hash_xor_eq)] +#[allow(clippy::derived_hash_with_manual_eq)] impl Hash for NotNan { #[inline] fn hash(&self, state: &mut H) { From d24123222273ccfb8e52f3c621510f0f7a46f2fb Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Thu, 9 Mar 2023 21:15:22 +0100 Subject: [PATCH 6/8] Add vendored RobustKernel for NotNan (for now) --- Cargo.toml | 4 +++- src/lib.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 79c4d5f..b3bfa36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,11 +24,13 @@ proptest = { version = "1.0.0", optional = true } speedy = { version = "0.8.3", optional = true, default-features = false } bytemuck = { version = "1.12.2", optional = true, default-features = false } geo = { version = "0.24", optional = true } +robust = { version = "0.2", optional = true } [dev-dependencies] serde_test = "1.0" [features] -default = ["std"] +default = ["std", "geo"] +geo = ["dep:geo", "dep:robust"] std = ["num-traits/std"] randtest = ["rand/std", "rand/std_rng"] diff --git a/src/lib.rs b/src/lib.rs index 23a95f5..ce3077e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2252,11 +2252,54 @@ mod impl_bytemuck { #[cfg(feature = "geo")] mod impl_geo { - use super::{Float, OrderedFloat}; - use geo::kernels::{HasKernel, RobustKernel}; + use super::{Float, NotNan, OrderedFloat}; + use geo::kernels::{HasKernel, Kernel, RobustKernel}; use geo::CoordNum; + use num_traits::NumCast; + use robust::{orient2d, Coord}; impl HasKernel for OrderedFloat { type Ker = RobustKernel; } + + impl HasKernel for NotNan { + type Ker = NotNanRobustKernel; + } + + #[derive(Default, Debug)] + pub struct NotNanRobustKernel; + + impl Kernel> for NotNanRobustKernel + where + T: Float + NumCast + CoordNum, + { + fn orient2d( + p: geo::Coord>, + q: geo::Coord>, + r: geo::Coord>, + ) -> geo::Orientation { + let orientation = orient2d( + Coord { + x: ::from(p.x).unwrap(), + y: ::from(p.y).unwrap(), + }, + Coord { + x: ::from(q.x).unwrap(), + y: ::from(q.y).unwrap(), + }, + Coord { + x: ::from(r.x).unwrap(), + y: ::from(r.y).unwrap(), + }, + ); + + if orientation > 0.0 { + geo::Orientation::CounterClockwise + } else if orientation < 0.0 { + geo::Orientation::Clockwise + } else { + geo::Orientation::Collinear + } + } + } } From d19ecfb2fc623e461e2b01bd7b8738a0df876ab9 Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Thu, 9 Mar 2023 21:19:05 +0100 Subject: [PATCH 7/8] Rename feature to geo-interop due to 1.36 compat --- Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b3bfa36..c1d5371 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,7 +30,7 @@ robust = { version = "0.2", optional = true } serde_test = "1.0" [features] -default = ["std", "geo"] -geo = ["dep:geo", "dep:robust"] -std = ["num-traits/std"] -randtest = ["rand/std", "rand/std_rng"] +default = ["std"] +geo-interop = ["dep:geo", "dep:robust"] +std = ["num-traits/std"] +randtest = ["rand/std", "rand/std_rng"] From 5d72040015d6fb4403da5ee8a748aaac9a0d69e9 Mon Sep 17 00:00:00 2001 From: MultisampledNight Date: Thu, 9 Mar 2023 21:21:06 +0100 Subject: [PATCH 8/8] Do not use explicit dep: feature syntax --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c1d5371..d21c913 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,6 @@ serde_test = "1.0" [features] default = ["std"] -geo-interop = ["dep:geo", "dep:robust"] +geo-interop = ["geo", "robust"] std = ["num-traits/std"] randtest = ["rand/std", "rand/std_rng"]