package org.torrent.internal.service;
import org.merapi.helper.handlers.BarUpdateRequestHandler;
import org.merapi.helper.messages.BarUpdateRespondMessage;
import org.torrent.internal.data.TorrentMetaInfo.Piece;
import org.torrent.internal.util.Bits;
public class BasicContentStateService extends AbstractContentStateService {
/**
* Encoded states: <br>
* 00 - Unknown<br>
* 01 - Available<br>
* 10 - Required<br>
* 11 - Validated
*/
private final Bits bits;
public BasicContentStateService(EventDispatcherService disp, int numPieces) {
super(disp);
bits = new Bits(numPieces * 2);
}
@Override
public boolean isAvailable(Piece piece) {
int idx = piece.getIndex() * 2;
return !bits.get(idx) && bits.get(idx + 1);
}
@Override
public boolean isRequired(Piece piece) {
int idx = piece.getIndex() * 2;
return bits.get(idx) && !bits.get(idx + 1);
}
@Override
public boolean isValidated(Piece piece) {
int idx = piece.getIndex() * 2;
return bits.get(idx) && bits.get(idx + 1);
}
@Override
public void setAvailable(Piece piece) {
int idx = piece.getIndex() * 2;
bits.set(idx, false);
bits.set(idx + 1, true);
super.setAvailable(piece);
}
@Override
public void setRequired(Piece piece) {
int idx = piece.getIndex() * 2;
bits.set(idx, true);
bits.set(idx + 1, false);
super.setRequired(piece);
}
@Override
public void setValidated(Piece piece) {
int idx = piece.getIndex() * 2;
bits.set(idx, true);
bits.set(idx + 1, true);
super.setValidated(piece);
}
}