text: "use strict";
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Observable_1 = require('../Observable');
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @extends {Ignored}
   * @hide true
   */
  var RangeObservable = (function (_super) {
      __extends(RangeObservable, _super);
      function RangeObservable(start, end, scheduler) {
          _super.call(this);
          this.start = start;
          this.end = end;
          this.scheduler = scheduler;
      }
      /**
       * @param start
       * @param end
       * @param scheduler
       * @return {RangeObservable}
       * @static true
       * @name range
       * @owner Observable
       */
      RangeObservable.create = function (start, end, scheduler) {
          if (start === void 0) { start = 0; }
          if (end === void 0) { end = 0; }
          return new RangeObservable(start, end, scheduler);
      };
      RangeObservable.dispatch = function (state) {
          var start = state.start, index = state.index, end = state.end, subscriber = state.subscriber;
          if (index >= end) {
              subscriber.complete();
              return;
          }
          subscriber.next(start);
          if (subscriber.isUnsubscribed) {
              return;
          }
          state.index = index + 1;
          state.start = start + 1;
          this.schedule(state);
      };
      RangeObservable.prototype._subscribe = function (subscriber) {
          var index = 0;
          var start = this.start;
          var end = this.end;
          var scheduler = this.scheduler;
          if (scheduler) {
              return scheduler.schedule(RangeObservable.dispatch, 0, {
                  index: index, end: end, start: start, subscriber: subscriber
              });
          }
          else {
              do {
                  if (index++ >= end) {
                      subscriber.complete();
                      break;
                  }
                  subscriber.next(start++);
                  if (subscriber.isUnsubscribed) {
                      break;
                  }
              } while (true);
          }
      };
      return RangeObservable;
  }(Observable_1.Observable));
  exports.RangeObservable = RangeObservable;
  //# sourceMappingURL=RangeObservable.js.map