Пример #1
0
	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;
	}
Пример #2
0
	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);
	}
Пример #3
0
    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));
    }