mirror of https://github.com/zlatinb/muwire
piece tracking
parent
c849629358
commit
16bf1e3fac
|
@ -0,0 +1,30 @@
|
|||
package com.muwire.core.download
|
||||
|
||||
class Pieces {
|
||||
private final BitSet bitSet
|
||||
private final int nPieces
|
||||
private final Random random = new Random()
|
||||
|
||||
Pieces(int nPieces) {
|
||||
this.nPieces = nPieces
|
||||
bitSet = new BitSet(nPieces)
|
||||
}
|
||||
|
||||
synchronized int getRandomPiece() {
|
||||
if (isComplete())
|
||||
return -1
|
||||
while(true) {
|
||||
int start = random.nextInt(nPieces)
|
||||
while(bitSet.get(start) && ++start < nPieces);
|
||||
return start
|
||||
}
|
||||
}
|
||||
|
||||
synchronized void markDownloaded(int piece) {
|
||||
bitSet.set(piece)
|
||||
}
|
||||
|
||||
synchronized boolean isComplete() {
|
||||
bitSet.cardinality() == nPieces
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.muwire.core.download
|
||||
|
||||
import org.junit.Test
|
||||
|
||||
class PiecesTest {
|
||||
|
||||
Pieces pieces
|
||||
|
||||
@Test
|
||||
public void testEmpty() {
|
||||
pieces = new Pieces(20)
|
||||
assert !pieces.isComplete()
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSinglePiece() {
|
||||
pieces = new Pieces(1)
|
||||
assert !pieces.isComplete()
|
||||
assert pieces.getRandomPiece() == 0
|
||||
pieces.markDownloaded(0)
|
||||
assert pieces.isComplete()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue