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');
  var ScalarObservable_1 = require('./ScalarObservable');
  var EmptyObservable_1 = require('./EmptyObservable');
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @extends {Ignored}
   * @hide true
   */
  var ArrayLikeObservable = (function (_super) {
      __extends(ArrayLikeObservable, _super);
      function ArrayLikeObservable(arrayLike, scheduler) {
          _super.call(this);
          this.arrayLike = arrayLike;
          this.scheduler = scheduler;
          if (!scheduler && arrayLike.length === 1) {
              this._isScalar = true;
              this.value = arrayLike[0];
          }
      }
      ArrayLikeObservable.create = function (arrayLike, scheduler) {
          var length = arrayLike.length;
          if (length === 0) {
              return new EmptyObservable_1.EmptyObservable();
          }
          else if (length === 1) {
              return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);
          }
          else {
              return new ArrayLikeObservable(arrayLike, scheduler);
          }
      };
      ArrayLikeObservable.dispatch = function (state) {
          var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;
          if (subscriber.closed) {
              return;
          }
          if (index >= length) {
              subscriber.complete();
              return;
          }
          subscriber.next(arrayLike[index]);
          state.index = index + 1;
          this.schedule(state);
      };
      ArrayLikeObservable.prototype._subscribe = function (subscriber) {
          var index = 0;
          var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;
          var length = arrayLike.length;
          if (scheduler) {
              return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {
                  arrayLike: arrayLike, index: index, length: length, subscriber: subscriber
              });
          }
          else {
              for (var i = 0; i < length && !subscriber.closed; i++) {
                  subscriber.next(arrayLike[i]);
              }
              subscriber.complete();
          }
      };
      return ArrayLikeObservable;
  }(Observable_1.Observable));
  exports.ArrayLikeObservable = ArrayLikeObservable;
  //# sourceMappingURL=ArrayLikeObservable.js.map