Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/iter/mutable.nct

mutable.nct

//! Allocation-free mutable iteration over contiguous views.

func mutable_from_view<T>(view: &+[T]): MutableViewIter<T> {
    return MutableViewIter<T> {
        view: view,
        next_index: 0,
    }
}

conform ExactSizeIterator for MutableViewIter<T> {
    method &self.remaining_len(): usize {
        return self.view.len() - self.next_index
    }
}

conform Iterator for MutableViewIter<T> {
    type Item = &+T

    /// Advances and returns an exclusive element borrow, or `none` at exhaustion.
    method &+self.next(): &+T? {
        if self.next_index >= self.view.len() {
            return none
        }
        let index: usize = self.next_index
        self.next_index = index + 1
        return &+self.view[index]
    }
}