docs: @Override
    public void aggregate(final ByteBuffer buf, final int position)
    {
      final ArrayOfDoublesSketch update = selector.getObject();
      if (update == null) {
        return;
      }
      // Wrapping memory and ArrayOfDoublesUnion is inexpensive compared to union operations.
      // Maintaining a cache of wrapped objects per buffer position like in Theta sketch aggregator
      // might might be considered, but it would increase complexity including relocate() support.
      final WritableMemory mem = WritableMemory.wrap(buf, ByteOrder.LITTLE_ENDIAN);
      final WritableMemory region = mem.writableRegion(position, maxIntermediateSize);
      final Lock lock = stripedLock.getAt(ArrayOfDoublesSketchBuildBufferAggregator.lockIndex(position)).writeLock();
      lock.lock();
      try {
        final ArrayOfDoublesUnion union = ArrayOfDoublesSketches.wrapUnion(region);
        union.update(update);
      }
      finally {
        lock.unlock();
      }
    }