download pieces sequentially if over a threshold
This commit is contained in:
@@ -3,16 +3,29 @@ package com.muwire.core.download
|
|||||||
class Pieces {
|
class Pieces {
|
||||||
private final BitSet bitSet
|
private final BitSet bitSet
|
||||||
private final int nPieces
|
private final int nPieces
|
||||||
|
private final float ratio
|
||||||
private final Random random = new Random()
|
private final Random random = new Random()
|
||||||
|
|
||||||
Pieces(int nPieces) {
|
Pieces(int nPieces) {
|
||||||
|
this(nPieces, 1.0f)
|
||||||
|
}
|
||||||
|
|
||||||
|
Pieces(int nPieces, float ratio) {
|
||||||
this.nPieces = nPieces
|
this.nPieces = nPieces
|
||||||
|
this.ratio = ratio
|
||||||
bitSet = new BitSet(nPieces)
|
bitSet = new BitSet(nPieces)
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized int getRandomPiece() {
|
synchronized int getRandomPiece() {
|
||||||
if (isComplete())
|
int cardinality = bitSet.cardinality()
|
||||||
|
if (cardinality == nPieces)
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
// if fuller than ratio just do sequential
|
||||||
|
if ( (1.0f * cardinality) / nPieces > ratio) {
|
||||||
|
return bitSet.nextClearBit(0)
|
||||||
|
}
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
int start = random.nextInt(nPieces)
|
int start = random.nextInt(nPieces)
|
||||||
while(bitSet.get(start) && ++start < nPieces);
|
while(bitSet.get(start) && ++start < nPieces);
|
||||||
|
|||||||
Reference in New Issue
Block a user