entry bdecode(span<char const> buffer) { entry e; bool err = false; auto it = buffer.begin(); detail::bdecode_recursive(it, buffer.end(), e, err, 0); TORRENT_ASSERT(e.m_type_queried == false); if (err) return entry(); return e; }
void disk_buffer_pool::free_multiple_buffers(span<char*> bufvec) { // sort the pointers in order to maximize cache hits std::sort(bufvec.begin(), bufvec.end()); std::unique_lock<std::mutex> l(m_pool_mutex); for (char* buf : bufvec) { TORRENT_ASSERT(is_disk_buffer(buf, l)); free_buffer_impl(buf, l); remove_buffer_in_use(buf); } check_buffer_level(l); }
void ShGcInt::reveal(span<u64> pIdxs) { ShGc::OutputItem out; out.mLabels.reset(new std::vector<block>(bitCount())); if (std::find(pIdxs.begin(), pIdxs.end(), mRt.mPartyIdx) != pIdxs.end()) { out.mOutputProm.reset(new std::promise<BitVector>()); mFutr = out.mOutputProm->get_future(); } else if (mFutr.valid()) { mFutr = std::future<BitVector>(); } out.mOutPartyIdxs.assign(pIdxs.begin(), pIdxs.end()); ShGc::CircuitItem cc; cc.mLabels.resize(2); cc.mLabels[0] = mLabels; cc.mLabels[1] = out.mLabels; mRt.enqueue(std::move(out)); mRt.enqueue(std::move(cc)); }