lib/src/util/collection/ArrayIterable.ts

34 lines
769 B
TypeScript
Raw Normal View History

2021-06-02 01:59:40 +00:00
import { Iterable } from './Iterable'
2021-06-03 03:36:25 +00:00
import {collect, Collection} from './Collection'
2021-06-02 01:59:40 +00:00
/**
* A basic Iterable implementation that uses an array as a backend.
* @extends Iterable
*/
export class ArrayIterable<T> extends Iterable<T> {
constructor(
/**
* Items to use for this iterable.
*/
protected items: T[],
) {
super()
}
2021-06-03 03:36:25 +00:00
async at(i: number): Promise<T | undefined> {
2021-06-02 01:59:40 +00:00
return this.items[i]
}
2021-06-03 03:36:25 +00:00
async range(start: number, end: number): Promise<Collection<T>> {
2021-06-02 01:59:40 +00:00
return collect(this.items.slice(start, end + 1))
}
2021-06-03 03:36:25 +00:00
async count(): Promise<number> {
2021-06-02 01:59:40 +00:00
return this.items.length
}
2021-06-03 03:36:25 +00:00
clone(): ArrayIterable<T> {
2021-06-02 01:59:40 +00:00
return new ArrayIterable([...this.items])
}
}