| 224 | } |
| 225 | |
| 226 | Result AsyncBuffersPool::pushBuffer(AsyncBufferView&& buffer, AsyncBufferView::ID& bufferID) |
| 227 | { |
| 228 | for (size_t idx = 0; idx < buffers.sizeInElements(); ++idx) |
| 229 | { |
| 230 | if (buffers[idx].getType() == AsyncBufferView::Type::Empty) |
| 231 | { |
| 232 | if (buffer.type == AsyncBufferView::Type::Growable and buffer.length == 0) |
| 233 | { |
| 234 | AsyncBufferView::GrowableStorage storage; |
| 235 | |
| 236 | auto da = buffer.getGrowableBuffer(storage, true)->getDirectAccess(); |
| 237 | buffer.length = da.sizeInBytes; |
| 238 | (void)buffer.getGrowableBuffer(storage, false); // destruct |
| 239 | } |
| 240 | buffer.refs = 0; |
| 241 | buffers[idx] = move(buffer); |
| 242 | bufferID = AsyncBufferView::ID(static_cast<AsyncBufferView::ID::NumericType>(idx)); |
| 243 | return Result(true); |
| 244 | } |
| 245 | } |
| 246 | return Result::Error("pushBuffer failed"); |
| 247 | } |
| 248 | |
| 249 | Result AsyncBuffersPool::sliceInEqualParts(Span<AsyncBufferView> buffers, Span<char> memory, size_t numSlices) |
| 250 | { |