rem: float down_speed = 0.f;
add: float down_speed = -1.f;
context: 	void request_a_block(torrent& t, peer_connection& c)	{		int num_requests = request_queue - c.download_queue().size();		// if our request queue is already full, we		// don't have to make any new requests yet		if (num_requests <= 0) return;		piece_picker& p = t.picker();		std::vector<piece_block> interesting_pieces;		interesting_pieces.reserve(100);		// picks the interesting pieces from this peer		// the integer is the number of pieces that		// should be guaranteed to be available for download		// (if this number is too big, too many pieces are		// picked and cpu-time is wasted)		p.pick_pieces(c.get_bitfield(), interesting_pieces, num_requests);		// this vector is filled with the interestin pieces		// that some other peer is currently downloading		// we should then compare this peer's download speed		// with the other's, to see if we should abort another		// peer_connection in favour of this one		std::vector<piece_block> busy_pieces;		busy_pieces.reserve(10);		for (std::vector<piece_block>::iterator i = interesting_pieces.begin();			i != interesting_pieces.end();			++i)		{			if (p.is_downloading(*i))			{				busy_pieces.push_back(*i);				continue;			}			// ok, we found a piece that's not being downloaded			// by somebody else. request it from this peer			c.request_block(*i);			num_requests--;			if (num_requests <= 0) return;		}		if (busy_pieces.empty()) return;		// first look for blocks that are just queued		// and not actually sent to us yet		// (then we can cancel those and request them		// from this peer instead)		peer_connection* peer = 0;		float down_speed = 0.f;		// find the peer with the lowest download		// speed that also has a piece thatt this		// peer could send us		for (torrent::peer_iterator i = t.begin();			i != t.end();			++i)		{			const std::vector<piece_block>& queue = (*i)->download_queue();			if ((*i)->statistics().down_peak() > down_speed				&& has_intersection(busy_pieces.begin(),					busy_pieces.end(),					queue.begin(),					queue.end()))			{				peer = *i;				down_speed = (*i)->statistics().down_peak();			}		}		assert(peer != 0);		// this peer doesn't have a faster connection than the		// slowest peer. Don't take over any blocks		if (c.statistics().down_peak() <= down_speed) return;		// find a suitable block to take over from this peer		piece_block block = find_first_common(peer->download_queue(), busy_pieces);		peer->cancel_block(block);		c.request_block(block);		// the one we interrupted may need to request a new piece		request_a_block(t, *peer);		num_requests--;	}