void CancelWhere(Predicate <Block> predicate) { bool cancelled = false; for (int p = 0; p < requests.Count; p++) { var blocks = requests [p].Blocks; for (int i = 0; i < blocks.Length; i++) { if (predicate(blocks[i]) && !blocks[i].Received) { cancelled = true; blocks[i].CancelRequest(); } } } if (cancelled) { requests.RemoveAll(delegate(Piece p) { return(p.NoBlocksRequested); }); } }
void CancelWhere(Predicate <Block> predicate) { bool cancelled = false; for (int p = 0; p < requests.Count; p++) { Block[] blocks = requests[p].Blocks; for (int i = 0; i < blocks.Length; i++) { if (predicate(blocks[i]) && !blocks[i].Received) { requests[p].Abandoned = true; cancelled = true; blocks[i].CancelRequest(); } } } if (cancelled) { requests.RemoveAll(p => p.NoBlocksRequested); } }
int CancelWhere(Predicate <Block> predicate) { int count = 0; for (int p = 0; p < requests.Count; p++) { Block[] blocks = requests[p].Blocks; for (int i = 0; i < blocks.Length; i++) { if (predicate(blocks[i]) && !blocks[i].Received) { requests[p].Abandoned = true; blocks[i].CancelRequest(); count++; } } } if (count > 0) { requests.RemoveAll(p => p.NoBlocksRequested); } return(count); }