From 3ab578942a326eaf6b7fbfa32c48622045d7d476 Mon Sep 17 00:00:00 2001 From: ivanjermakov Date: Wed, 13 Mar 2024 04:56:03 +0100 Subject: [PATCH] Std: intersperse and peekable fixes --- README.md | 2 +- node-import-transform.ts | 2 +- src/std/iter/intersperseIter.no | 11 +++++++---- src/std/iter/peekable.no | 9 +++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e566d70c..f5facf24 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ impl Area for Shape { } } -fn main() { +pub fn main() { let shapes: List = [ Shape::Rect(width: 4., height: 2.), Shape::Circle(radius: 12.34), diff --git a/node-import-transform.ts b/node-import-transform.ts index d381e339..6e3554db 100644 --- a/node-import-transform.ts +++ b/node-import-transform.ts @@ -19,7 +19,7 @@ function exec(args: string[]): string[] { .filter(s => s.length > 0) } -if (exec([`grep`, `-r`, `.js'`, `dist`]).length > 0) { +if (exec([`grep`, `-r`, `.js'`, `dist`]).length > 10) { exit() } const dirImports = exec([`find`, `dist`, `-name`, `index.js`]) diff --git a/src/std/iter/intersperseIter.no b/src/std/iter/intersperseIter.no index e9101805..ef969f90 100644 --- a/src/std/iter/intersperseIter.no +++ b/src/std/iter/intersperseIter.no @@ -1,5 +1,7 @@ +use std::iter::{ PeekableIter, PeekableAdapter } + pub type IntersperseIter( - iter: Iter, + iter: PeekableIter, separator: T, needsSeparator: Bool ) @@ -10,8 +12,9 @@ impl Iter for IntersperseIter { self.needsSeparator = false Some(self.separator) } else { - self.needsSeparator = true - self.iter.next() + let n = self.iter.next() + self.needsSeparator = self.iter.peek().isSome() + n } } } @@ -22,7 +25,7 @@ pub trait IntersperseAdapter { impl IntersperseAdapter for Iter { fn intersperse(self, separator: T): Iter { - IntersperseIter(iter: self, separator, needsSeparator: false) + IntersperseIter(iter: self.peekable(), separator, needsSeparator: false) } } diff --git a/src/std/iter/peekable.no b/src/std/iter/peekable.no index c7980f8f..363fdab1 100644 --- a/src/std/iter/peekable.no +++ b/src/std/iter/peekable.no @@ -1,15 +1,16 @@ pub type PeekableIter( iter: Iter, - peeked: Option>, + peeked: Option> ) impl PeekableIter { - fn peek(self): Option { + pub fn peek(self): Option { match self.peeked { Some(value) { value } None() { - self.peeked = Some(self.iter.next()) - self.peeked + let n = self.next() + self.peeked = Some(value: n) + n } } }