| import { Subscriber } from '../Subscriber'; |
| export function bufferCount(bufferSize, startBufferEvery = null) { |
| return function bufferCountOperatorFunction(source) { |
| return source.lift(new BufferCountOperator(bufferSize, startBufferEvery)); |
| }; |
| } |
| class BufferCountOperator { |
| constructor(bufferSize, startBufferEvery) { |
| this.bufferSize = bufferSize; |
| this.startBufferEvery = startBufferEvery; |
| if (!startBufferEvery || bufferSize === startBufferEvery) { |
| this.subscriberClass = BufferCountSubscriber; |
| } |
| else { |
| this.subscriberClass = BufferSkipCountSubscriber; |
| } |
| } |
| call(subscriber, source) { |
| return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery)); |
| } |
| } |
| class BufferCountSubscriber extends Subscriber { |
| constructor(destination, bufferSize) { |
| super(destination); |
| this.bufferSize = bufferSize; |
| this.buffer = []; |
| } |
| _next(value) { |
| const buffer = this.buffer; |
| buffer.push(value); |
| if (buffer.length == this.bufferSize) { |
| this.destination.next(buffer); |
| this.buffer = []; |
| } |
| } |
| _complete() { |
| const buffer = this.buffer; |
| if (buffer.length > 0) { |
| this.destination.next(buffer); |
| } |
| super._complete(); |
| } |
| } |
| class BufferSkipCountSubscriber extends Subscriber { |
| constructor(destination, bufferSize, startBufferEvery) { |
| super(destination); |
| this.bufferSize = bufferSize; |
| this.startBufferEvery = startBufferEvery; |
| this.buffers = []; |
| this.count = 0; |
| } |
| _next(value) { |
| const { bufferSize, startBufferEvery, buffers, count } = this; |
| this.count++; |
| if (count % startBufferEvery === 0) { |
| buffers.push([]); |
| } |
| for (let i = buffers.length; i--;) { |
| const buffer = buffers[i]; |
| buffer.push(value); |
| if (buffer.length === bufferSize) { |
| buffers.splice(i, 1); |
| this.destination.next(buffer); |
| } |
| } |
| } |
| _complete() { |
| const { buffers, destination } = this; |
| while (buffers.length > 0) { |
| let buffer = buffers.shift(); |
| if (buffer.length > 0) { |
| destination.next(buffer); |
| } |
| } |
| super._complete(); |
| } |
| } |
| //# sourceMappingURL=bufferCount.js.map |