From c103609550f9d0f53f9faacc48336b2df1c70244 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Fri, 31 Mar 2023 20:08:57 -0500 Subject: [PATCH] port stepToNextEdge --- .../fast_edge_to_edge_counter.rs | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/common/cpp_essentials/fast_edge_to_edge_counter.rs b/src/common/cpp_essentials/fast_edge_to_edge_counter.rs index 3913f19..10aad9f 100644 --- a/src/common/cpp_essentials/fast_edge_to_edge_counter.rs +++ b/src/common/cpp_essentials/fast_edge_to_edge_counter.rs @@ -45,22 +45,26 @@ impl FastEdgeToEdgeCounter { } } - pub fn stepToNextEdge(&self, _range: i32) -> i32 { - todo!() - // int maxSteps = std::min(stepsToBorder, range); - // int steps = 0; - // do { - // if (++steps > maxSteps) { - // if (maxSteps == stepsToBorder) - // break; - // else - // return 0; - // } - // } while (p[steps * stride] == p[0]); + pub fn stepToNextEdge(&self, range: u32) -> u32 { + let maxSteps = std::cmp::min(self.stepsToBorder, range); + let steps = 0; + loop { + steps += 1; + if (steps > maxSteps) { + if (maxSteps == self.stepsToBorder) { + break; + } else { + return 0; + } + } + if !(self.arr.get((steps * self.stride) as usize) == self.arr.get(0)) { + break; + } + } // while (p[steps * stride] == p[0]); - // p += steps * stride; - // stepsToBorder -= steps; + self.p += steps * self.stride; + self.stepsToBorder -= steps; - // return steps; + return steps; } }