51 lines
1011 B
TypeScript
51 lines
1011 B
TypeScript
import { ILayer, ILayers } from './Layer';
|
|
|
|
export interface IKeyMap extends IterableIterator<ILayer> {
|
|
layers: ILayers;
|
|
[index: number]: ILayer;
|
|
}
|
|
|
|
export class KeyMap implements IKeyMap {
|
|
layers: ILayers = [];
|
|
index: number = 0;
|
|
|
|
constructor(layers: ILayers) {
|
|
this.layers = layers;
|
|
this.index = 0;
|
|
}
|
|
|
|
[index: number]: ILayer;
|
|
|
|
forEach(fn: (k: ILayer, i: number) => any): void {
|
|
return this.layers.forEach(fn);
|
|
}
|
|
|
|
map(fn: (k: ILayer, i: number) => ILayer): ILayers {
|
|
return this.layers.map(fn);
|
|
}
|
|
|
|
get length(): number {
|
|
return this.layers.length;
|
|
}
|
|
|
|
public next(): IteratorResult<ILayer> {
|
|
if (this.index < this.layers.length) {
|
|
return {
|
|
done: false,
|
|
value: this.layers[this.index++],
|
|
};
|
|
}
|
|
return {
|
|
done: true,
|
|
value: null,
|
|
};
|
|
}
|
|
|
|
[Symbol.iterator](): IterableIterator<ILayer> {
|
|
return this;
|
|
}
|
|
}
|
|
|
|
export const keymap = (...layers: ILayers): IKeyMap => new KeyMap(layers);
|
|
export default keymap;
|