text: 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