docs: @Override
      public E poll() {
          // local load of field to avoid repeated loads after volatile reads
          final long[] sBuffer = sequenceBuffer;
          final long mask = this.mask;
  
          long cIndex;
          long seq;
          long seqOffset;
          long expectedSeq;
          long pIndex = -1; // start with bogus value, hope we don't need it
          do {
              cIndex = lvConsumerIndex();
              seqOffset = calcSequenceOffset(cIndex, mask);
              seq = lvSequence(sBuffer, seqOffset);
              expectedSeq = cIndex + 1;
              if (seq < expectedSeq) { // slot has not been moved by producer
                  if (cIndex >= pIndex && // test against cached pIndex
                      cIndex == (pIndex = lvProducerIndex())) { // update pIndex if we must
                      // strict empty check, this ensures [Queue.poll() == null iff isEmpty()]
                      return null;
                  } else {
                      seq = expectedSeq + 1; // trip another go around
                  }
              }
          } while (seq > expectedSeq || // another consumer beat us to it
                  !casConsumerIndex(cIndex, cIndex + 1)); // failed the CAS
  
          final long offset = calcElementOffset(cIndex, mask);
          final E e = lpElement(buffer, offset);
          assert e != null;
          soElement(buffer, offset, null);
          soSequence(sBuffer, seqOffset, cIndex + mask + 1);// i.e. seq += capacity
          return e;
      }