/* */ #include "Piece.h" #include "Util.h" #include "BitfieldManFactory.h" Piece::Piece():index(0), length(0), bitfield(0) {} Piece::Piece(int32_t index, int32_t 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(int32_t 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(int32_t blockIndex) { bitfield->unsetUseBit(blockIndex); } int32_t Piece::getMissingUnusedBlockIndex() const { int32_t blockIndex = bitfield->getFirstMissingUnusedIndex(); if(blockIndex == -1) { return blockIndex; } bitfield->setUseBit(blockIndex); return blockIndex; } int32_t Piece::getMissingBlockIndex() const { int32_t 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); } void Piece::reconfigure(int32_t length) { this->length = length; bitfield = BitfieldManFactory::getFactoryInstance()->createBitfieldMan(BLOCK_LENGTH, length); } void Piece::setBitfield(const unsigned char* bitfield, int32_t len) { this->bitfield->setBitfield(bitfield, len); }