1.0.0 • Published 6 years ago

@kingjs/define-enumerable-type v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
6 years ago

@kingjs/define-enumerable-type

Define an enumerable type from a MoveNext() factory.

Usage

Define an enumerable type for iterating Array using a moveNext() factory like this:

var defineEnumerableType = require('@kingjs/define-enumerable-type');

var moveNextFactory = function(array) {
  var index = -1;
  return function moveNext() {
    if (index + 1 == array.length)
      return false;
    this.current_ = array[++index];
    return true;
  }
}

var ArrayEnumerable = defineEnumerableType(moveNextFactory);

Voila! Now, test the ArrayEnumerable like this:

var enumerable = new ArrayEnumerable([0, 1, 2]);
var enumerator = enumerable.getEnumerator();

var actual = [];
while (enumerator.moveNext())
  actual.push(enumerator.current);
actual;

outputs:

[0, 1, 2];

API

declare function defineEnumerableType(
    moveNextFactory: {
        (...args: any[]): {
            moveNext: { (): Boolean }
        }
    }): typeof Enumerable;
    
declare class Enumerable {
    constructor(...args: any[]);

    getEnumerator: {
        (): {
            moveNext: { (): Boolean },
            current: any
        }
    }
}

Parameters

moveNextFactory: a function that returns a moveNext() function closed over the enumerable activation arguments.

Return Value

An enumerable type whose activation arguments are saved and passed to the specified moveNextFactory when getEnumerator() is called.

Install

With npm installed, run

$ npm install @kingjs/define-enumerable-type

Acknowledgments

define-enumerable-type was inspired by the boilerplate generated by C# yield syntax. Though we cannot generate the state machine, we can generate the type scaffolding.

See Also

License

MIT