From c753621cf8fb0426f8d3901921bb544c27622487 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Wed, 18 May 2022 14:31:51 -0400 Subject: [PATCH] add `to_values` --- src/misc.rs | 15 ++++++++++++--- tests/misc.rs | 11 +++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/misc.rs b/src/misc.rs index ea43f57..82afac7 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -183,6 +183,9 @@ impl<'a> From<&'a [f64]> for SteppedVector<'a> { /// Implements traits that are useful when dealing with Vectors of egui's `Value` pub trait EguiHelper { + /// Converts to `egui::plot::Values` + fn to_values(self) -> Values; + /// Converts to `egui::plot::Line` fn to_line(self) -> Line; @@ -195,13 +198,19 @@ pub trait EguiHelper { impl EguiHelper for Vec { #[inline(always)] - fn to_line(self) -> Line { Line::new(Values::from_values(self)) } + fn to_values(self) -> Values { Values::from_values(self) } #[inline(always)] - fn to_points(self) -> Points { Points::new(Values::from_values(self)) } + fn to_line(self) -> Line { Line::new(self.to_values()) } #[inline(always)] - fn to_tuple(self) -> Vec<(f64, f64)> { self.iter().map(|ele| (ele.x, ele.y)).collect() } + fn to_points(self) -> Points { Points::new(self.to_values()) } + + #[inline(always)] + fn to_tuple(self) -> Vec<(f64, f64)> { + // self.iter().map(|ele| (ele.x, ele.y)).collect() + unsafe { std::mem::transmute::, Vec<(f64, f64)>>(self) } + } } /* diff --git a/tests/misc.rs b/tests/misc.rs index 474f78e..1d88214 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -115,6 +115,17 @@ fn invalid_hashed_storage() { assert_eq!(hashed_storage_read("aaaa"), None); } +#[test] +fn to_values() { + use egui::plot::{Value, Values}; + use ytbn_graphing_software::EguiHelper; + let data_raw = vec![(0.0, 1.0), (1.0, 3.0), (2.0, 4.0)]; + let data: Vec = data_raw.iter().map(|(x, y)| Value::new(*x, *y)).collect(); + let values: Values = data.clone().to_values(); + + assert_eq!(*values.get_values(), data); +} + #[test] fn to_tuple() { use egui::plot::Value;