{"version":3,"sources":["iterable/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,gBAAkC,SAAQ,SAAkB;IAMhE,YACE,YAAoB,EACpB,SAAqC,EACrC,OAAkC,EAClC,cAA0C;QAE1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACzE,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SAC/B;IACH,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CACtB,YAAoB,EACpB,SAAqC,EACrC,OAAkC,EAClC,cAA0C;IAE1C,OAAO,IAAI,gBAAgB,CAAkB,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AACjG,CAAC","file":"generate.js","sourcesContent":["import { IterableX } from './iterablex';\n\nclass GenerateIterable<TState, TResult> extends IterableX<TResult> {\n  private _initialState: TState;\n  private _condition: (value: TState) => boolean;\n  private _iterate: (value: TState) => TState;\n  private _resultSelector: (value: TState) => TResult;\n\n  constructor(\n    initialState: TState,\n    condition: (value: TState) => boolean,\n    iterate: (value: TState) => TState,\n    resultSelector: (value: TState) => TResult\n  ) {\n    super();\n    this._initialState = initialState;\n    this._condition = condition;\n    this._iterate = iterate;\n    this._resultSelector = resultSelector;\n  }\n\n  *[Symbol.iterator]() {\n    for (let i = this._initialState; this._condition(i); i = this._iterate(i)) {\n      yield this._resultSelector(i);\n    }\n  }\n}\n\n/**\n * Generates an iterable sequence by running a state-driven loop producing the sequence's elements.\n *\n * @export\n * @template TState The type of the state used in the generator loop.\n * @template TResult The type of the elements in the produced sequence.\n * @param {TState} initialState The initial state.\n * @param {((value: TState) => boolean)} condition Condition to terminate generation (upon returning false).\n * @param {((value: TState) => TState)} iterate Iteration step function.\n * @param {((value: TState) => TResult)} resultSelector Selector function for results produced in\n * the sequence.\n * @returns {IterableX<TResult>} The generated iterable sequence.\n */\nexport function generate<TState, TResult>(\n  initialState: TState,\n  condition: (value: TState) => boolean,\n  iterate: (value: TState) => TState,\n  resultSelector: (value: TState) => TResult\n): IterableX<TResult> {\n  return new GenerateIterable<TState, TResult>(initialState, condition, iterate, resultSelector);\n}\n"]}