From 6a1672e7148b58998f58c626b11f12f8a1e08119 Mon Sep 17 00:00:00 2001 From: Ivan Date: Tue, 28 Feb 2023 02:16:43 +0300 Subject: [PATCH 1/2] 81 close --- src/find.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/find.rs b/src/find.rs index 21ae9ba..c690d18 100644 --- a/src/find.rs +++ b/src/find.rs @@ -18,12 +18,14 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -use crate::{ConstRelay, DeadRelay, LambdaRelay, Relay, Sodg}; -use anyhow::{anyhow, Result}; -use log::trace; use std::collections::VecDeque; use std::str::FromStr; +use anyhow::{anyhow, Result}; +use log::trace; + +use crate::{ConstRelay, DeadRelay, LambdaRelay, Relay, Sodg}; + impl Relay for ConstRelay { fn re(&self, _v: u32, _a: &str) -> Result { Ok(self.s.clone()) @@ -195,12 +197,9 @@ impl Sodg { trace!("#find(ν{v1}, {loc}): {indent}calling relay(ν{v}, {k})..."); let fault = match relay.re(v, &k) { Ok(re) => { - if let Ok(to) = self.find_with_indent(v, re.as_str(), relay, depth + 1) { - trace!("#find(ν{v1}, {loc}): {indent}ν{v}.{k} relayed to ν{to} (re: {re})"); - v = to; - continue; - } - format!("re to '{re}' didn't help") + trace!("#find(ν{v1}, {loc}): {indent}ν{v}.{k} relayed to {re}"); + locator.push_front(re); + continue; } Err(err) => { trace!( From 8e8bb2f9f0a2dcca53ad3f3d050cb385ec1cb02f Mon Sep 17 00:00:00 2001 From: Ivan Date: Thu, 2 Mar 2023 02:12:03 +0300 Subject: [PATCH 2/2] find_with_intend removed --- src/find.rs | 40 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/src/find.rs b/src/find.rs index c690d18..17b2c1c 100644 --- a/src/find.rs +++ b/src/find.rs @@ -126,36 +126,9 @@ impl Sodg { } } #[allow(clippy::let_and_return)] - let v = self.find_with_indent(v1, loc, relay, 0); - #[cfg(feature = "sober")] - { - let cp = self as *const Self; - let mp = cp as *mut Self; - unsafe { - (&mut *mp).finds.remove(&badge); - } - } - v - } - - /// Find a vertex, printing the log with an indentation prefix. - /// - /// This function is used only by [`Sodg::find]. - fn find_with_indent( - &self, - v1: u32, - loc: &str, - relay: &T, - depth: usize, - ) -> Result { - #[cfg(feature = "sober")] - { - if depth > 16 { - return Err(anyhow!("The depth {depth} is too big")); - } - } let mut v = v1; let mut locator: VecDeque = VecDeque::new(); + let depth = 0; loc.split('.') .filter(|k| !k.is_empty()) .for_each(|k| locator.push_back(k.to_string())); @@ -213,7 +186,16 @@ impl Sodg { return Err(anyhow!("Can't find .{k} in {}: ({fault})", self.v_print(v))); } trace!("#find(ν{v1}, {loc}): {indent}found ν{v} in {jumps} jumps"); - Ok(v) + let found = Ok(v); + #[cfg(feature = "sober")] + { + let cp = self as *const Self; + let mp = cp as *mut Self; + unsafe { + (&mut *mp).finds.remove(&badge); + } + } + found } }