void allocAsNecessary()

in dispenso/detail/concurrent_vector_impl.h [363:379]


  void allocAsNecessary(const BucketInfo& binfo) {
    const size_t indexToCheck = (kStrategy == ConcurrentVectorReallocStrategy::kFullBufferAhead)
        ? 0
        : (kStrategy == ConcurrentVectorReallocStrategy::kHalfBufferAhead
               ? binfo.bucketCapacity / 2
               : binfo.bucketCapacity - 1);

    if (DISPENSO_EXPECT(binfo.bucketIndex == indexToCheck, 0)) {
      if (!this->buffers_[binfo.bucket + 1].load(std::memory_order_acquire)) {
        this->buffers_[binfo.bucket + 1].store(
            cv::alloc<T>(binfo.bucketCapacity << 1), std::memory_order_release);
        shouldDealloc_[binfo.bucket + 1] = true;
      }
    }
    while (DISPENSO_EXPECT(!this->buffers_[binfo.bucket].load(std::memory_order_acquire), 0)) {
    }
  }