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 __());
};
define(["require", "exports", '../Observable'], function (require, exports, Observable_1) {
    var RangeObservable = (function (_super) {
        __extends(RangeObservable, _super);
        function RangeObservable(start, end, scheduler) {
            _super.call(this);
            this.start = start;
            this.end = end;
            this.scheduler = scheduler;
        }
        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) {
                subscriber.add(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.default);
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.default = RangeObservable;
});
//# sourceMappingURL=RangeObservable.js.map