/* */ #include "Piece.h" #include "Util.h" #include "BitfieldManFactory.h" Piece::Piece():index(0), length(0), bitfield(0) {} Piece::Piece(int index, int length):index(index), length(length) { bitfield = BitfieldManFactory::getFactoryInstance()->createBitfieldMan(BLOCK_LENGTH, length); } Piece::Piece(const Piece& piece) { index = piece.index; length = piece.length; if(piece.bitfield == 0) { bitfield = 0; } else { bitfield = new BitfieldMan(*piece.bitfield); } } void Piece::completeBlock(int blockIndex) { bitfield->setBit(blockIndex); bitfield->unsetUseBit(blockIndex); } void Piece::clearAllBlock() { bitfield->clearAllBit(); bitfield->clearAllUseBit(); } void Piece::setAllBlock() { bitfield->setAllBit(); } bool Piece::pieceComplete() const { return bitfield->isAllBitSet(); } void Piece::cancelBlock(int blockIndex) { bitfield->unsetUseBit(blockIndex); } int Piece::getMissingUnusedBlockIndex() const { int blockIndex = bitfield->getFirstMissingUnusedIndex(); if(blockIndex == -1) { return blockIndex; } bitfield->setUseBit(blockIndex); return blockIndex; } int Piece::getMissingBlockIndex() const { int blockIndex = bitfield->getMissingIndex(); if(blockIndex == -1) { return blockIndex; } bitfield->setUseBit(blockIndex); return blockIndex; } BlockIndexes Piece::getAllMissingBlockIndexes() const { return bitfield->getAllMissingIndexes(); } string Piece::toString() const { return "piece: index="+Util::itos(index)+", length="+Util::itos(length); }