12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { operate } from '../util/lift';
- import { createOperatorSubscriber } from './OperatorSubscriber';
- import { innerFrom } from '../observable/innerFrom';
- export function sequenceEqual(compareTo, comparator) {
- if (comparator === void 0) { comparator = function (a, b) { return a === b; }; }
- return operate(function (source, subscriber) {
- var aState = createState();
- var bState = createState();
- var emit = function (isEqual) {
- subscriber.next(isEqual);
- subscriber.complete();
- };
- var createSubscriber = function (selfState, otherState) {
- var sequenceEqualSubscriber = createOperatorSubscriber(subscriber, function (a) {
- var buffer = otherState.buffer, complete = otherState.complete;
- if (buffer.length === 0) {
- complete ? emit(false) : selfState.buffer.push(a);
- }
- else {
- !comparator(a, buffer.shift()) && emit(false);
- }
- }, function () {
- selfState.complete = true;
- var complete = otherState.complete, buffer = otherState.buffer;
- complete && emit(buffer.length === 0);
- sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe();
- });
- return sequenceEqualSubscriber;
- };
- source.subscribe(createSubscriber(aState, bState));
- innerFrom(compareTo).subscribe(createSubscriber(bState, aState));
- });
- }
- function createState() {
- return {
- buffer: [],
- complete: false,
- };
- }
- //# sourceMappingURL=sequenceEqual.js.map
|