Skip to content

Commit

Permalink
Std: intersperse and peekable fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanjermakov committed Mar 13, 2024
1 parent f40e981 commit 3ab5789
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 10 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl Area for Shape {
}
}

fn main() {
pub fn main() {
let shapes: List<Shape> = [
Shape::Rect(width: 4., height: 2.),
Shape::Circle(radius: 12.34),
Expand Down
2 changes: 1 addition & 1 deletion node-import-transform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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`])
Expand Down
11 changes: 7 additions & 4 deletions src/std/iter/intersperseIter.no
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use std::iter::{ PeekableIter, PeekableAdapter }

pub type IntersperseIter<T>(
iter: Iter<T>,
iter: PeekableIter<T>,
separator: T,
needsSeparator: Bool
)
Expand All @@ -10,8 +12,9 @@ impl <T> Iter<T> for IntersperseIter<T> {
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
}
}
}
Expand All @@ -22,7 +25,7 @@ pub trait IntersperseAdapter<T> {

impl <T> IntersperseAdapter<T> for Iter<T> {
fn intersperse(self, separator: T): Iter<T> {
IntersperseIter(iter: self, separator, needsSeparator: false)
IntersperseIter(iter: self.peekable(), separator, needsSeparator: false)
}
}

9 changes: 5 additions & 4 deletions src/std/iter/peekable.no
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
pub type PeekableIter<T>(
iter: Iter<T>,
peeked: Option<Option<T>>,
peeked: Option<Option<T>>
)

impl <T> PeekableIter<T> {
fn peek(self): Option<T> {
pub fn peek(self): Option<T> {
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
}
}
}
Expand Down

0 comments on commit 3ab5789

Please sign in to comment.