From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <yew-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 8ABEE1FF15C for <inbox@lore.proxmox.com>; Fri, 30 May 2025 14:22:19 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8AA212E6DE; Fri, 30 May 2025 14:22:35 +0200 (CEST) From: Dominik Csapak <d.csapak@proxmox.com> To: yew-devel@lists.proxmox.com Date: Fri, 30 May 2025 14:21:44 +0200 Message-Id: <20250530122202.2779300-3-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250530122202.2779300-1-d.csapak@proxmox.com> References: <20250530122202.2779300-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [yew-devel] [PATCH yew-comp 02/20] rrd: refactor code for compute_min_max X-BeenThere: yew-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Yew framework devel list at Proxmox <yew-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/yew-devel/> List-Post: <mailto:yew-devel@lists.proxmox.com> List-Help: <mailto:yew-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Yew framework devel list at Proxmox <yew-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: yew-devel-bounces@lists.proxmox.com Sender: "yew-devel" <yew-devel-bounces@lists.proxmox.com> using some simple combinators makes the code a bit shorter and more readable. Using +/- INFINITY as marker for having no values, reduces the code further since we don't have to handle the options in the loop. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- src/rrd_graph_new.rs | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/rrd_graph_new.rs b/src/rrd_graph_new.rs index 2c77a38..bfa7d1e 100644 --- a/src/rrd_graph_new.rs +++ b/src/rrd_graph_new.rs @@ -311,34 +311,19 @@ fn render_value(props: &RRDGraph, v: f64) -> String { } fn compute_min_max(props: &RRDGraph, data1: &[f64], data2: &[f64]) -> (f64, f64, f64) { - let mut min_data: Option<f64> = None; - let mut max_data: Option<f64> = None; + let mut min_data: f64 = f64::INFINITY; + let mut max_data: f64 = -f64::INFINITY; - for data in [data1, data2] { - for v in data.iter() { - if !v.is_finite() { - continue; // NaN, INFINITY - } - if let Some(min) = min_data { - if *v < min { - min_data = Some(*v); - } - } else { - min_data = Some(*v); - } - - if let Some(max) = max_data { - if *v > max { - max_data = Some(*v); - } - } else { - max_data = Some(*v); - } - } + for v in data1.iter().chain(data2).filter(|v| v.is_finite()) { + min_data = min_data.min(*v); + max_data = max_data.max(*v); } - let mut max_data = max_data.unwrap_or(1.0); - let mut min_data = min_data.unwrap_or(0.0); + // if one is infinite, the other must be too + if min_data.is_infinite() || max_data.is_infinite() { + min_data = 0.0; + max_data = 1.0; + } if props.include_zero { max_data = max_data.max(0.0); -- 2.39.5 _______________________________________________ yew-devel mailing list yew-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel