Skip to content

Tracking Issue for Iterator::map_windows (feature iter_map_windows) #87155

Open
@LukasKalbertodt

Description

@LukasKalbertodt

Feature gate: #![feature(iter_map_windows)]

This is a tracking issue for Iterator::map_windows:

Calls the given function f for each contiguous window of size N over self and returns an iterator over the outputs of f.

In the following example, the closure is called three times with the arguments &['a', 'b'], &['b', 'c'] and &['c', 'd'] respectively.

#![feature(iter_map_windows)]

let strings = "abcd".chars()
    .map_windows(|[x, y]| format!("{}+{}", x, y))
    .collect::<Vec<String>>();

assert_eq!(strings, vec!["a+b", "b+c", "c+d"]);

Public API

impl Iterator {
    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
    where
        Self: Sized,
        F: FnMut(&[Self::Item; N]) -> R;
}

struct MapWindows<I: Iterator, F, const N: usize> { ... }

impl<I, F, R, const N: usize> Iterator for MapWindows<I, F, N>
where
    I: Iterator,
    F: FnMut(&[I::Item; N]) -> R;

impl<I: Iterator + fmt::Debug, F, const N: usize> fmt::Debug for MapWindows<I, F, N>;

Steps / History

  • Implementation: Add Iterator::map_windows #82413
  • Implementation: Add Iterator::map_windows #94667
  • Optimize with buffer of size 2 * N
  • Any other iterator-related traits?
    • DoubleEndedIterator
    • FusedIterator
    • TrustedLen
  • Compile fail on N=0, rather than panic. Blocked on a solution for compile errors in callers that are generic over N and would want a fallback for N=0.
  • Final comment period (FCP)
  • Stabilization PR

Unresolved Questions

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions