Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,37 @@
|
||||
module arrays
|
||||
|
||||
// ReverseIterator provides a convenient way to iterate in reverse over all elements of an array without allocations.
|
||||
// I.e. it allows you to use this syntax: `for elem in arrays.reverse_iterator(a) {` .
|
||||
pub struct ReverseIterator[T] {
|
||||
mut:
|
||||
a []T
|
||||
i int
|
||||
}
|
||||
|
||||
// reverse_iterator can be used to iterate over the elements in an array.
|
||||
// i.e. you can use this syntax: `for elem in arrays.reverse_iterator(a) {` .
|
||||
pub fn reverse_iterator[T](a []T) ReverseIterator[T] {
|
||||
return ReverseIterator[T]{
|
||||
a: a
|
||||
i: a.len
|
||||
}
|
||||
}
|
||||
|
||||
// next is the required method, to implement an iterator in V.
|
||||
// It returns none when the iteration should stop.
|
||||
// Otherwise it returns the current element of the array.
|
||||
@[direct_array_access]
|
||||
pub fn (mut iter ReverseIterator[T]) next() ?&T {
|
||||
iter.i--
|
||||
if iter.i < 0 {
|
||||
return none
|
||||
}
|
||||
return unsafe { &iter.a[iter.i] }
|
||||
}
|
||||
|
||||
// free frees the iterator resources.
|
||||
pub fn (iter &ReverseIterator[T]) free() {
|
||||
// The array stored in the iterator is not owned by the iterator.
|
||||
// It should not be freed, when the iterator goes out of scope.
|
||||
// This is the reason, that this manual free method exists and is empty.
|
||||
}
|
||||
Reference in new issue
Block a user