code: public void add(@NotNull ByteBuf buf) {
  		if (!buf.canRead()) {
  			buf.recycle();
  			return;
  		}
  
  		bufs[last] = buf;
  		last = next(last);
  		if (last == first) {
  			grow();
  		}
  	}
docs: Adds provided ByteBuf to this ByteBufQueue.
  If this ByteBuf hasn't readable bytes, it won't
  be added to the queue and will be recycled.
  <p>
  The added ByteBuf is set at the current {@code last}
  position of the queue. Then {@code last} index is
  increased by 1 or set to the value 0 if it has run
  a full circle of the queue.
  <p>
  If {@code last} and {@code first} indexes become the same,
  this ByteBufQueue size will be doubled.
  
  @param buf the ByteBuf to be added to the queue