diff --git a/ChangeLog b/ChangeLog index 7ece9ead..39f29af6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,50 @@ +2010-11-11 Tatsuhiro Tsujikawa + + To match the behavior of friend operator functions in + SharedHandle.h to std::tr1::shared_ptr, we intentionally broke + these functions and modified code so that our code does not depend + on old behavior. + * src/AbstractCommand.cc + * src/DHTAbstractNodeLookupTask.h + * src/DHTBucket.cc + * src/DHTMessageReceiver.cc + * src/DHTNodeLookupEntry.cc + * src/DHTRoutingTable.cc + * src/DefaultBtRequestFactory.cc + * src/DefaultPeerStorage.cc + * src/DefaultPieceStorage.cc + * src/DownloadContext.cc + * src/EpollEventPoll.cc + * src/Event.h + * src/HttpConnection.cc + * src/KqueueEventPoll.cc + * src/MultiDiskAdaptor.cc + * src/PeerAbstractCommand.cc + * src/PieceStatMan.cc + * src/PollEventPoll.cc + * src/PortEventPoll.cc + * src/SegmentMan.cc + * src/SelectEventPoll.cc + * src/SelectEventPoll.h + * src/ServerStatMan.cc + * src/SharedHandle.h + * src/UnknownLengthPieceStorage.cc + * src/a2functional.h + * src/option_processing.cc + * src/version_usage.cc + * test/BNodeTest.cc + * test/DHTAnnouncePeerMessageTest.cc + * test/DHTBucketTest.cc + * test/DHTFindNodeMessageTest.cc + * test/DHTGetPeersMessageTest.cc + * test/DHTIDCloserTest.cc + * test/DHTMessageFactoryImplTest.cc + * test/DHTPingMessageTest.cc + * test/DefaultBtRequestFactoryTest.cc + * test/DefaultPeerStorageTest.cc + * test/SequentialPickerTest.cc + * test/SingletonHolderTest.cc + 2010-11-11 Tatsuhiro Tsujikawa Create SharedHandle outside of function call to avoid unexpected diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index c83ef87b..1375c8b3 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -462,7 +462,7 @@ void AbstractCommand::setReadCheckSocket(const SocketHandle& socket) { disableReadCheckSocket(); } else { if(checkSocketIsReadable_) { - if(readCheckTarget_ != socket) { + if(*readCheckTarget_ != *socket) { e_->deleteSocketForReadCheck(readCheckTarget_, this); e_->addSocketForReadCheck(socket, this); readCheckTarget_ = socket; @@ -498,7 +498,7 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) { disableWriteCheckSocket(); } else { if(checkSocketIsWritable_) { - if(writeCheckTarget_ != socket) { + if(*writeCheckTarget_ != *socket) { e_->deleteSocketForWriteCheck(writeCheckTarget_, this); e_->addSocketForWriteCheck(socket, this); writeCheckTarget_ = socket; diff --git a/src/DHTAbstractNodeLookupTask.h b/src/DHTAbstractNodeLookupTask.h index 869e0597..0922d8fa 100644 --- a/src/DHTAbstractNodeLookupTask.h +++ b/src/DHTAbstractNodeLookupTask.h @@ -54,6 +54,7 @@ #include "Logger.h" #include "util.h" #include "DHTIDCloser.h" +#include "a2functional.h" namespace aria2 { @@ -203,7 +204,10 @@ public: static_cast(count)); } std::stable_sort(entries_.begin(), entries_.end(), DHTIDCloser(targetID_)); - entries_.erase(std::unique(entries_.begin(), entries_.end()), entries_.end()); + entries_.erase + (std::unique(entries_.begin(), entries_.end(), + DerefEqualTo >()), + entries_.end()); if(getLogger()->debug()) { getLogger()->debug("%lu node lookup entries are unique.", static_cast(entries_.size())); @@ -223,7 +227,7 @@ public: --inFlightMessage_; for(std::deque >::iterator i = entries_.begin(), eoi = entries_.end(); i != eoi; ++i) { - if((*i)->node == node) { + if(*(*i)->node == *node) { entries_.erase(i); break; } diff --git a/src/DHTBucket.cc b/src/DHTBucket.cc index acaa04ad..258b7ada 100644 --- a/src/DHTBucket.cc +++ b/src/DHTBucket.cc @@ -111,7 +111,7 @@ bool DHTBucket::addNode(const SharedHandle& node) { notifyUpdate(); std::deque >::iterator itr = - std::find(nodes_.begin(), nodes_.end(), node); + std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node)); if(itr == nodes_.end()) { if(nodes_.size() < K) { nodes_.push_back(node); @@ -145,7 +145,7 @@ void DHTBucket::dropNode(const SharedHandle& node) { if(cachedNodes_.size()) { std::deque >::iterator itr = - find(nodes_.begin(), nodes_.end(), node); + std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node)); if(itr != nodes_.end()) { nodes_.erase(itr); nodes_.push_back(cachedNodes_.front()); @@ -157,7 +157,7 @@ void DHTBucket::dropNode(const SharedHandle& node) void DHTBucket::moveToHead(const SharedHandle& node) { std::deque >::iterator itr = - std::find(nodes_.begin(), nodes_.end(), node); + std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node)); if(itr != nodes_.end()) { nodes_.erase(itr); nodes_.push_front(node); @@ -167,7 +167,7 @@ void DHTBucket::moveToHead(const SharedHandle& node) void DHTBucket::moveToTail(const SharedHandle& node) { std::deque >::iterator itr = - std::find(nodes_.begin(), nodes_.end(), node); + std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node)); if(itr != nodes_.end()) { nodes_.erase(itr); nodes_.push_back(node); @@ -233,7 +233,7 @@ SharedHandle DHTBucket::getNode(const unsigned char* nodeID, const std: node->setIPAddress(ipaddr); node->setPort(port); std::deque >::const_iterator itr = - std::find(nodes_.begin(), nodes_.end(), node); + std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node)); if(itr == nodes_.end()) { return SharedHandle(); } else { diff --git a/src/DHTMessageReceiver.cc b/src/DHTMessageReceiver.cc index 3883272b..ddcb9891 100644 --- a/src/DHTMessageReceiver.cc +++ b/src/DHTMessageReceiver.cc @@ -109,7 +109,7 @@ SharedHandle DHTMessageReceiver::receiveMessage() } else { SharedHandle message = factory_->createQueryMessage(dict, remoteAddr, remotePort); - if(message->getLocalNode() == message->getRemoteNode()) { + if(*message->getLocalNode() == *message->getRemoteNode()) { // drop message from localnode logger_->info("Received DHT message from localnode."); return handleUnknownMessage(data, sizeof(data), remoteAddr, remotePort); diff --git a/src/DHTNodeLookupEntry.cc b/src/DHTNodeLookupEntry.cc index 7596db18..58cb5825 100644 --- a/src/DHTNodeLookupEntry.cc +++ b/src/DHTNodeLookupEntry.cc @@ -45,7 +45,7 @@ DHTNodeLookupEntry::DHTNodeLookupEntry(): bool DHTNodeLookupEntry::operator==(const DHTNodeLookupEntry& entry) const { - return node == entry.node; + return *node == *entry.node; } } // namespace aria2 diff --git a/src/DHTRoutingTable.cc b/src/DHTRoutingTable.cc index f7876082..5d4bf18f 100644 --- a/src/DHTRoutingTable.cc +++ b/src/DHTRoutingTable.cc @@ -77,7 +77,7 @@ bool DHTRoutingTable::addNode(const SharedHandle& node, bool good) if(logger_->debug()) { logger_->debug("Trying to add node:%s", node->toString().c_str()); } - if(localNode_ == node) { + if(*localNode_ == *node) { if(logger_->debug()) { logger_->debug("Adding node with the same ID with localnode is not" " allowed."); diff --git a/src/DefaultBtRequestFactory.cc b/src/DefaultBtRequestFactory.cc index 005e0786..7a3f022a 100644 --- a/src/DefaultBtRequestFactory.cc +++ b/src/DefaultBtRequestFactory.cc @@ -99,8 +99,9 @@ void DefaultBtRequestFactory::removeCompletedPiece() { void DefaultBtRequestFactory::removeTargetPiece (const SharedHandle& piece) { - pieces_.erase(std::remove(pieces_.begin(), pieces_.end(), piece), - pieces_.end()); + pieces_.erase(std::remove_if(pieces_.begin(), pieces_.end(), + derefEqual(piece)), + pieces_.end()); dispatcher_->doAbortOutstandingRequestAction(piece); pieceStorage_->cancelPiece(piece); } diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index a565a82a..eebac966 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -45,6 +45,7 @@ #include "BtLeecherStateChoke.h" #include "PieceStorage.h" #include "wallclock.h" +#include "a2functional.h" namespace aria2 { @@ -75,7 +76,7 @@ public: FindIdenticalPeer(const SharedHandle& peer):peer_(peer) {} bool operator()(const SharedHandle& peer) const { - return (peer_ == peer) || + return (*peer_ == *peer) || ((peer_->getIPAddress() == peer->getIPAddress()) && (peer_->getPort() == peer->getPort())); } @@ -337,7 +338,7 @@ void DefaultPeerStorage::onReturningPeer(const SharedHandle& peer) void DefaultPeerStorage::returnPeer(const SharedHandle& peer) { std::deque >::iterator itr = - std::find(peers_.begin(), peers_.end(), peer); + std::find_if(peers_.begin(), peers_.end(), derefEqual(peer)); if(itr == peers_.end()) { if(logger_->debug()) { logger_->debug("Cannot find peer %s:%u in PeerStorage.", diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc index 5b9d2eaf..1a187c19 100644 --- a/src/DefaultPieceStorage.cc +++ b/src/DefaultPieceStorage.cc @@ -127,7 +127,8 @@ SharedHandle DefaultPieceStorage::getPiece(size_t index) void DefaultPieceStorage::addUsedPiece(const SharedHandle& piece) { std::deque >::iterator i = - std::lower_bound(usedPieces_.begin(), usedPieces_.end(), piece); + std::lower_bound(usedPieces_.begin(), usedPieces_.end(), piece, + DerefLess >()); usedPieces_.insert(i, piece); if(logger_->debug()) { logger_->debug("usedPieces_.size()=%lu", @@ -141,8 +142,9 @@ SharedHandle DefaultPieceStorage::findUsedPiece(size_t index) const p->setIndex(index); std::deque >::const_iterator i = - std::lower_bound(usedPieces_.begin(), usedPieces_.end(), p); - if(i != usedPieces_.end() && (*i) == p) { + std::lower_bound(usedPieces_.begin(), usedPieces_.end(), p, + DerefLess >()); + if(i != usedPieces_.end() && *(*i) == *p) { return *i; } else { p.reset(0); @@ -365,8 +367,9 @@ void DefaultPieceStorage::deleteUsedPiece(const SharedHandle& piece) return; } std::deque >::iterator i = - std::lower_bound(usedPieces_.begin(), usedPieces_.end(), piece); - if(i != usedPieces_.end() && (*i) == piece) { + std::lower_bound(usedPieces_.begin(), usedPieces_.end(), piece, + DerefLess >()); + if(i != usedPieces_.end() && *(*i) == *piece) { usedPieces_.erase(i); } } @@ -723,7 +726,8 @@ void DefaultPieceStorage::addInFlightPiece (const std::vector >& pieces) { usedPieces_.insert(usedPieces_.end(), pieces.begin(), pieces.end()); - std::sort(usedPieces_.begin(), usedPieces_.end()); + std::sort(usedPieces_.begin(), usedPieces_.end(), + DerefLess >()); } size_t DefaultPieceStorage::countInFlightPiece() diff --git a/src/DownloadContext.cc b/src/DownloadContext.cc index ac84fd3e..f0397634 100644 --- a/src/DownloadContext.cc +++ b/src/DownloadContext.cc @@ -41,6 +41,7 @@ #include "util.h" #include "wallclock.h" #include "DlAbortEx.h" +#include "a2functional.h" namespace aria2 { @@ -102,7 +103,8 @@ DownloadContext::findFileEntryByOffset(off_t offset) const SharedHandle obj(new FileEntry()); obj->setOffset(offset); std::vector >::const_iterator i = - std::upper_bound(fileEntries_.begin(), fileEntries_.end(), obj); + std::upper_bound(fileEntries_.begin(), fileEntries_.end(), obj, + DerefLess >()); if(i != fileEntries_.end() && (*i)->getOffset() == offset) { return *i; } else { diff --git a/src/EpollEventPoll.cc b/src/EpollEventPoll.cc index 75db479d..d7077fdb 100644 --- a/src/EpollEventPoll.cc +++ b/src/EpollEventPoll.cc @@ -43,6 +43,7 @@ #include "LogFactory.h" #include "Logger.h" #include "util.h" +#include "a2functional.h" namespace aria2 { @@ -166,10 +167,11 @@ bool EpollEventPoll::addEvents(sock_t socket, { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); int r = 0; int errNum = 0; - if(i != socketEntries_.end() && (*i) == socketEntry) { + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.addSelf(*i); @@ -229,8 +231,9 @@ bool EpollEventPoll::deleteEvents(sock_t socket, { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.removeSelf(*i); @@ -295,7 +298,8 @@ bool EpollEventPoll::addNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { nameResolverEntries_.push_back(entry); entry->addSocketEvents(this); @@ -311,7 +315,8 @@ bool EpollEventPoll::deleteNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { return false; } else { diff --git a/src/Event.h b/src/Event.h index 83e0cfb4..ce10c332 100644 --- a/src/Event.h +++ b/src/Event.h @@ -151,7 +151,7 @@ public: bool operator==(const ADNSEvent& event) const { - return resolver_ == event.resolver_; + return *resolver_ == *event.resolver_; } virtual int getEvents() const @@ -323,7 +323,7 @@ public: bool operator==(const AsyncNameResolverEntry& entry) { - return nameResolver_ == entry.nameResolver_ && + return *nameResolver_ == *entry.nameResolver_ && command_ == entry.command_; } diff --git a/src/HttpConnection.cc b/src/HttpConnection.cc index 56710e62..127ff192 100644 --- a/src/HttpConnection.cc +++ b/src/HttpConnection.cc @@ -165,7 +165,7 @@ bool HttpConnection::isIssued(const SharedHandle& segment) const for(HttpRequestEntries::const_iterator itr = outstandingHttpRequests_.begin(), eoi = outstandingHttpRequests_.end(); itr != eoi; ++itr) { SharedHandle httpRequest = (*itr)->getHttpRequest(); - if(httpRequest->getSegment() == segment) { + if(*httpRequest->getSegment() == *segment) { return true; } } diff --git a/src/KqueueEventPoll.cc b/src/KqueueEventPoll.cc index be4b7a5a..dfa500b4 100644 --- a/src/KqueueEventPoll.cc +++ b/src/KqueueEventPoll.cc @@ -170,12 +170,13 @@ bool KqueueEventPoll::addEvents { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); int r = 0; struct timespec zeroTimeout = { 0, 0 }; struct kevent changelist[2]; size_t n; - if(i != socketEntries_.end() && (*i) == socketEntry) { + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.addSelf(*i); n = (*i)->getEvents(changelist); } else { @@ -221,8 +222,9 @@ bool KqueueEventPoll::deleteEvents(sock_t socket, { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.removeSelf(*i); int r = 0; struct timespec zeroTimeout = { 0, 0 }; @@ -272,7 +274,8 @@ bool KqueueEventPoll::addNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { nameResolverEntries_.push_back(entry); entry->addSocketEvents(this); @@ -288,7 +291,8 @@ bool KqueueEventPoll::deleteNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { return false; } else { diff --git a/src/MultiDiskAdaptor.cc b/src/MultiDiskAdaptor.cc index 288d06e6..05dcb719 100644 --- a/src/MultiDiskAdaptor.cc +++ b/src/MultiDiskAdaptor.cc @@ -119,7 +119,7 @@ void DiskWriterEntry::setDiskWriter(const SharedHandle& diskWriter) bool DiskWriterEntry::operator<(const DiskWriterEntry& entry) const { - return fileEntry_ < entry.fileEntry_; + return *fileEntry_ < *entry.fileEntry_; } void DiskWriterEntry::enableDirectIO() diff --git a/src/PeerAbstractCommand.cc b/src/PeerAbstractCommand.cc index 4a663839..ef6a2af2 100644 --- a/src/PeerAbstractCommand.cc +++ b/src/PeerAbstractCommand.cc @@ -148,7 +148,7 @@ void PeerAbstractCommand::setReadCheckSocket(const SocketHandle& socket) disableReadCheckSocket(); } else { if(checkSocketIsReadable_) { - if(readCheckTarget_ != socket) { + if(*readCheckTarget_ != *socket) { e_->deleteSocketForReadCheck(readCheckTarget_, this); e_->addSocketForReadCheck(socket, this); readCheckTarget_ = socket; @@ -176,7 +176,7 @@ void PeerAbstractCommand::setWriteCheckSocket(const SocketHandle& socket) disableWriteCheckSocket(); } else { if(checkSocketIsWritable_) { - if(writeCheckTarget_ != socket) { + if(*writeCheckTarget_ != *socket) { e_->deleteSocketForWriteCheck(writeCheckTarget_, this); e_->addSocketForWriteCheck(socket, this); writeCheckTarget_ = socket; diff --git a/src/PieceStatMan.cc b/src/PieceStatMan.cc index af442f43..2fd8818b 100644 --- a/src/PieceStatMan.cc +++ b/src/PieceStatMan.cc @@ -103,7 +103,7 @@ public: bool operator()(size_t lhs, size_t rhs) const { - return pieceStats_[lhs] < pieceStats_[rhs]; + return *pieceStats_[lhs] < *pieceStats_[rhs]; } }; } // namespace diff --git a/src/PollEventPoll.cc b/src/PollEventPoll.cc index eaa174f1..1af0771d 100644 --- a/src/PollEventPoll.cc +++ b/src/PollEventPoll.cc @@ -41,6 +41,7 @@ #include "Command.h" #include "LogFactory.h" #include "Logger.h" +#include "a2functional.h" namespace aria2 { @@ -97,8 +98,9 @@ void PollEventPoll::poll(const struct timeval& tv) if(first->revents) { se->setSocket(first->fd); std::deque >::iterator itr = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), se); - if(itr != socketEntries_.end() && (*itr) == se) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), se, + DerefLess >()); + if(itr != socketEntries_.end() && *(*itr) == *se) { (*itr)->processEvents(first->revents); } else { if(logger_->debug()) { @@ -150,8 +152,9 @@ bool PollEventPoll::addEvents { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.addSelf(*i); for(struct pollfd* first = pollfds_, *last = pollfds_+pollfdNum_; first != last; ++first) { @@ -197,8 +200,9 @@ bool PollEventPoll::deleteEvents { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.removeSelf(*i); for(struct pollfd* first = pollfds_, *last = pollfds_+pollfdNum_; first != last; ++first) { @@ -246,7 +250,8 @@ bool PollEventPoll::addNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { nameResolverEntries_.push_back(entry); entry->addSocketEvents(this); @@ -262,7 +267,8 @@ bool PollEventPoll::deleteNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { return false; } else { diff --git a/src/PortEventPoll.cc b/src/PortEventPoll.cc index cb3757cd..363c619f 100644 --- a/src/PortEventPoll.cc +++ b/src/PortEventPoll.cc @@ -173,10 +173,11 @@ bool PortEventPoll::addEvents(sock_t socket, { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); int r = 0; int errNum = 0; - if(i != socketEntries_.end() && (*i) == socketEntry) { + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.addSelf(*i); A2PortEvent pv = (*i)->getEvents(); r = port_associate(port_, PORT_SOURCE_FD, (*i)->getSocket(), @@ -226,8 +227,9 @@ bool PortEventPoll::deleteEvents(sock_t socket, { SharedHandle socketEntry(new KSocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { event.removeSelf(*i); int r = 0; int errNum = 0; @@ -280,7 +282,8 @@ bool PortEventPoll::addNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { nameResolverEntries_.push_back(entry); entry->addSocketEvents(this); @@ -296,7 +299,8 @@ bool PortEventPoll::deleteNameResolver SharedHandle entry (new KAsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { return false; } else { diff --git a/src/SegmentMan.cc b/src/SegmentMan.cc index ced3df30..bc83c6f5 100644 --- a/src/SegmentMan.cc +++ b/src/SegmentMan.cc @@ -280,7 +280,7 @@ void SegmentMan::cancelSegment { for(SegmentEntries::iterator itr = usedSegmentEntries_.begin(), eoi = usedSegmentEntries_.end(); itr != eoi;) { - if((*itr)->cuid == cuid && (*itr)->segment == segment) { + if((*itr)->cuid == cuid && *(*itr)->segment == *segment) { cancelSegment((*itr)->segment); itr = usedSegmentEntries_.erase(itr); //eoi = usedSegmentEntries_.end(); diff --git a/src/SelectEventPoll.cc b/src/SelectEventPoll.cc index 473091e3..4297b55e 100644 --- a/src/SelectEventPoll.cc +++ b/src/SelectEventPoll.cc @@ -44,6 +44,7 @@ #include "Command.h" #include "LogFactory.h" #include "Logger.h" +#include "a2functional.h" namespace aria2 { @@ -278,8 +279,9 @@ bool SelectEventPoll::addEvents(sock_t socket, Command* command, { SharedHandle socketEntry(new SocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { (*i)->addCommandEvent(command, events); } else { socketEntries_.insert(i, socketEntry); @@ -294,8 +296,9 @@ bool SelectEventPoll::deleteEvents(sock_t socket, Command* command, { SharedHandle socketEntry(new SocketEntry(socket)); std::deque >::iterator i = - std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry); - if(i != socketEntries_.end() && (*i) == socketEntry) { + std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry, + DerefLess >()); + if(i != socketEntries_.end() && *(*i) == *socketEntry) { (*i)->removeCommandEvent(command, events); if((*i)->eventEmpty()) { socketEntries_.erase(i); @@ -317,7 +320,8 @@ bool SelectEventPoll::addNameResolver SharedHandle entry (new AsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { nameResolverEntries_.push_back(entry); return true; @@ -332,7 +336,8 @@ bool SelectEventPoll::deleteNameResolver SharedHandle entry (new AsyncNameResolverEntry(resolver, command)); std::deque >::iterator itr = - std::find(nameResolverEntries_.begin(), nameResolverEntries_.end(), entry); + std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(), + derefEqual(entry)); if(itr == nameResolverEntries_.end()) { return false; } else { diff --git a/src/SelectEventPoll.h b/src/SelectEventPoll.h index 5396fdfe..705d9eb9 100644 --- a/src/SelectEventPoll.h +++ b/src/SelectEventPoll.h @@ -143,7 +143,7 @@ private: bool operator==(const AsyncNameResolverEntry& entry) { - return nameResolver_ == entry.nameResolver_ && + return *nameResolver_ == *entry.nameResolver_ && command_ == entry.command_; } diff --git a/src/ServerStatMan.cc b/src/ServerStatMan.cc index ba74481e..4b1f93b6 100644 --- a/src/ServerStatMan.cc +++ b/src/ServerStatMan.cc @@ -43,6 +43,7 @@ #include "ServerStat.h" #include "util.h" #include "RecoverableException.h" +#include "a2functional.h" namespace aria2 { @@ -55,7 +56,8 @@ SharedHandle ServerStatMan::find(const std::string& hostname, { SharedHandle ss(new ServerStat(hostname, protocol)); std::deque >::const_iterator i = - std::lower_bound(serverStats_.begin(), serverStats_.end(), ss); + std::lower_bound(serverStats_.begin(), serverStats_.end(), ss, + DerefLess >()); if(i != serverStats_.end() && (*i)->getHostname() == hostname && (*i)->getProtocol() == protocol) { return *i; @@ -67,9 +69,10 @@ SharedHandle ServerStatMan::find(const std::string& hostname, bool ServerStatMan::add(const SharedHandle& serverStat) { std::deque >::iterator i = - std::lower_bound(serverStats_.begin(), serverStats_.end(), serverStat); + std::lower_bound(serverStats_.begin(), serverStats_.end(), serverStat, + DerefLess >()); - if(i != serverStats_.end() && (*i) == serverStat) { + if(i != serverStats_.end() && *(*i) == *serverStat) { return false; } else { serverStats_.insert(i, serverStat); @@ -79,8 +82,10 @@ bool ServerStatMan::add(const SharedHandle& serverStat) bool ServerStatMan::save(std::ostream& out) const { - std::copy(serverStats_.begin(), serverStats_.end(), - std::ostream_iterator >(out, "\n")); + for(std::deque >::const_iterator i = + serverStats_.begin(), eoi = serverStats_.end(); i != eoi; ++i) { + out << *(*i) << "\n"; + } out.flush(); return !out.bad(); } diff --git a/src/SharedHandle.h b/src/SharedHandle.h index 2fe5d62f..9e08f819 100644 --- a/src/SharedHandle.h +++ b/src/SharedHandle.h @@ -35,6 +35,7 @@ #ifndef D_SHARED_HANDLE_H #define D_SHARED_HANDLE_H +#include #include namespace aria2 { @@ -236,6 +237,11 @@ public: T* operator->() const { return obj_; } + T& operator*() const { + assert(obj_); + return *obj_; + } + T* get() const { return obj_; } @@ -273,25 +279,26 @@ static_pointer_cast(const SharedHandle& t) { return SharedHandle(t, static_cast(t.get())); } +// Intentionally renamed obj_ as obj_x to cause error template std::ostream& operator<<(std::ostream& o, const SharedHandle& sp) { - o << *sp.obj_; + o << *sp.obj_x; return o; } template bool operator==(const SharedHandle& t1, const SharedHandle& t2) { - return *t1.obj_ == *t2.obj_; + return *t1.obj_x == *t2.obj_; } template bool operator!=(const SharedHandle& t1, const SharedHandle& t2) { - return *t1.obj_ != *t2.obj_; + return *t1.obj_x != *t2.obj_; } template bool operator<(const SharedHandle& t1, const SharedHandle& t2) { - return *t1.obj_ < *t2.obj_; + return *t1.obj_x < *t2.obj_; } template @@ -357,6 +364,11 @@ public: T* operator->() const { return obj_; } + T& operator*() const { + assert(obj_); + return *obj_; + } + T* get() const { if(isNull()) { return 0; @@ -378,25 +390,26 @@ public: } }; +// Intentionally renamed obj_ as obj_x to cause error template std::ostream& operator<<(std::ostream& o, const WeakHandle& sp) { - o << *sp.obj_; + o << *sp.obj_x; return o; } template bool operator==(const WeakHandle& t1, const WeakHandle& t2) { - return *t1.obj_ == *t2.obj_; + return *t1.obj_x == *t2.obj_; } template bool operator!=(const WeakHandle& t1, const WeakHandle& t2) { - return *t1.obj_ != *t2.obj_; + return *t1.obj_x != *t2.obj_; } template bool operator<(const WeakHandle& t1, const WeakHandle& t2) { - return *t1.obj_ < *t2.obj_; + return *t1.obj_x < *t2.obj_; } template diff --git a/src/UnknownLengthPieceStorage.cc b/src/UnknownLengthPieceStorage.cc index 4c967f9e..6cc6e936 100644 --- a/src/UnknownLengthPieceStorage.cc +++ b/src/UnknownLengthPieceStorage.cc @@ -167,7 +167,7 @@ SharedHandle UnknownLengthPieceStorage::getPiece(size_t index) void UnknownLengthPieceStorage::completePiece(const SharedHandle& piece) { - if(piece_ == piece) { + if(*piece_ == *piece) { downloadFinished_ = true; totalLength_ = piece_->getLength(); diskAdaptor_->setTotalLength(totalLength_); @@ -177,7 +177,7 @@ void UnknownLengthPieceStorage::completePiece(const SharedHandle& piece) void UnknownLengthPieceStorage::cancelPiece(const SharedHandle& piece) { - if(piece_ == piece) { + if(*piece_ == *piece) { piece_.reset(); } } diff --git a/src/a2functional.h b/src/a2functional.h index 7b90cf9e..2cfc6669 100644 --- a/src/a2functional.h +++ b/src/a2functional.h @@ -431,6 +431,39 @@ bool in(T x, S s, S t) return s <= x && x <= t; } +template +struct DerefLess { + bool operator()(const T& lhs, const T& rhs) const + { + return *lhs < *rhs; + } +}; + +template +struct DerefEqualTo { + bool operator()(const T& lhs, const T& rhs) const + { + return *lhs == *rhs; + } +}; + +template +struct DerefEqual { + T target; + + DerefEqual(const T& t):target(t) {} + bool operator()(const T& other) const + { + return *target == *other; + } +}; + +template +struct DerefEqual derefEqual(const T& t) +{ + return DerefEqual(t); +} + } // namespace aria2 #endif // D_A2_FUNCTIONAL_H diff --git a/src/option_processing.cc b/src/option_processing.cc index 831ec244..ee3e4884 100644 --- a/src/option_processing.cc +++ b/src/option_processing.cc @@ -174,7 +174,7 @@ void option_processing(Option& op, std::vector& uris, } catch(OptionHandlerException& e) { std::cerr << e.stackTrace() << "\n" << "Usage:" << "\n" - << oparser.findByName(e.getOptionName()) + << *oparser.findByName(e.getOptionName()) << std::endl; exit(downloadresultcode::UNKNOWN_ERROR); } catch(Exception& e) { diff --git a/src/version_usage.cc b/src/version_usage.cc index 5d018b69..6662e290 100644 --- a/src/version_usage.cc +++ b/src/version_usage.cc @@ -101,10 +101,10 @@ void showUsage(const std::string& keyword, const OptionParser& oparser) { } std::cout << "\n" << _("Options:") << "\n"; - - std::copy(handlers.begin(), handlers.end(), - std::ostream_iterator > - (std::cout, "\n\n")); + for(std::vector >::const_iterator i = + handlers.begin(), eoi = handlers.end(); i != eoi; ++i) { + std::cout << *(*i) << "\n\n"; + } } else { std::vector > handlers = oparser.findByNameSubstring(keyword); @@ -113,13 +113,14 @@ void showUsage(const std::string& keyword, const OptionParser& oparser) { " '%s'."), keyword.c_str()) << "\n" << _("Options:") << "\n"; - std::copy(handlers.begin(), handlers.end(), - std::ostream_iterator > - (std::cout, "\n\n")); + for(std::vector >::const_iterator i = + handlers.begin(), eoi = handlers.end(); i != eoi; ++i) { + std::cout << *(*i) << "\n\n"; + } } else { std::cout << StringFormat(_("No option matching with '%s'."), keyword.c_str()) - << "\n" << oparser.findByName("help") << "\n"; + << "\n" << *oparser.findByName("help") << "\n"; } } diff --git a/test/BNodeTest.cc b/test/BNodeTest.cc index f5ddac6e..730225b1 100644 --- a/test/BNodeTest.cc +++ b/test/BNodeTest.cc @@ -68,7 +68,7 @@ void BNodeTest::testFindBucketFor() { BNode b(bucket5); - CPPUNIT_ASSERT(bucket5 == BNode::findBucketFor(&b, localNodeID)); + CPPUNIT_ASSERT(*bucket5 == *BNode::findBucketFor(&b, localNodeID)); } { BNode b(bucket1); @@ -97,7 +97,7 @@ void BNodeTest::testFindBucketFor() bp4->setLeft(bp3); bp4->setRight(b2); - CPPUNIT_ASSERT(bucket5 == BNode::findBucketFor(bp4, localNode->getID())); + CPPUNIT_ASSERT(*bucket5 == *BNode::findBucketFor(bp4, localNode->getID())); delete bp4; } @@ -220,7 +220,7 @@ void BNodeTest::testEnumerateBucket() std::vector > buckets; BNode::enumerateBucket(buckets, &b); CPPUNIT_ASSERT_EQUAL((size_t)1, buckets.size()); - CPPUNIT_ASSERT(bucket1 == buckets[0]); + CPPUNIT_ASSERT(*bucket1 == *buckets[0]); } { BNode* b1 = new BNode(bucket1); @@ -248,11 +248,11 @@ void BNodeTest::testEnumerateBucket() std::vector > buckets; BNode::enumerateBucket(buckets, bp4); CPPUNIT_ASSERT_EQUAL((size_t)5, buckets.size()); - CPPUNIT_ASSERT(bucket1 == buckets[0]); - CPPUNIT_ASSERT(bucket3 == buckets[1]); - CPPUNIT_ASSERT(bucket5 == buckets[2]); - CPPUNIT_ASSERT(bucket4 == buckets[3]); - CPPUNIT_ASSERT(bucket2 == buckets[4]); + CPPUNIT_ASSERT(*bucket1 == *buckets[0]); + CPPUNIT_ASSERT(*bucket3 == *buckets[1]); + CPPUNIT_ASSERT(*bucket5 == *buckets[2]); + CPPUNIT_ASSERT(*bucket4 == *buckets[3]); + CPPUNIT_ASSERT(*bucket2 == *buckets[4]); delete bp4; } diff --git a/test/DHTAnnouncePeerMessageTest.cc b/test/DHTAnnouncePeerMessageTest.cc index 1a8c8149..20bc28db 100644 --- a/test/DHTAnnouncePeerMessageTest.cc +++ b/test/DHTAnnouncePeerMessageTest.cc @@ -111,8 +111,8 @@ void DHTAnnouncePeerMessageTest::testDoReceivedAction() SharedHandle m (dynamic_pointer_cast (dispatcher.messageQueue_[0].message_)); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("announce_peer"), m->getMessageType()); CPPUNIT_ASSERT_EQUAL(transactionID, m->getTransactionID()); std::vector > peers; diff --git a/test/DHTBucketTest.cc b/test/DHTBucketTest.cc index 14da5016..11adca59 100644 --- a/test/DHTBucketTest.cc +++ b/test/DHTBucketTest.cc @@ -319,7 +319,7 @@ void DHTBucketTest::testAddNode() // nodes[0] is located at the tail of the bucket(least recent seen) nodes[0]->markBad(); CPPUNIT_ASSERT(bucket.addNode(newNode)); - CPPUNIT_ASSERT(bucket.getNodes().back() == newNode); + CPPUNIT_ASSERT(*bucket.getNodes().back() == *newNode); } void DHTBucketTest::testMoveToHead() @@ -337,7 +337,7 @@ void DHTBucketTest::testMoveToHead() CPPUNIT_ASSERT(bucket.addNode(nodes[i])); } bucket.moveToHead(nodes[DHTBucket::K-1]); - CPPUNIT_ASSERT(bucket.getNodes().front() == nodes[DHTBucket::K-1]); + CPPUNIT_ASSERT(*bucket.getNodes().front() == *nodes[DHTBucket::K-1]); } void DHTBucketTest::testMoveToTail() @@ -355,7 +355,7 @@ void DHTBucketTest::testMoveToTail() CPPUNIT_ASSERT(bucket.addNode(nodes[i])); } bucket.moveToTail(nodes[0]); - CPPUNIT_ASSERT(bucket.getNodes().back() == nodes[0]); + CPPUNIT_ASSERT(*bucket.getNodes().back() == *nodes[0]); } void DHTBucketTest::testGetGoodNodes() @@ -400,12 +400,12 @@ void DHTBucketTest::testCacheNode() bucket.cacheNode(n1); bucket.cacheNode(n2); CPPUNIT_ASSERT_EQUAL((size_t)2, bucket.getCachedNodes().size()); - CPPUNIT_ASSERT(n2 == bucket.getCachedNodes()[0]); + CPPUNIT_ASSERT(*n2 == *bucket.getCachedNodes()[0]); bucket.cacheNode(n3); CPPUNIT_ASSERT_EQUAL((size_t)2, bucket.getCachedNodes().size()); - CPPUNIT_ASSERT(n3 == bucket.getCachedNodes()[0]); - CPPUNIT_ASSERT(n2 == bucket.getCachedNodes()[1]); + CPPUNIT_ASSERT(*n3 == *bucket.getCachedNodes()[0]); + CPPUNIT_ASSERT(*n2 == *bucket.getCachedNodes()[1]); } void DHTBucketTest::testDropNode() @@ -432,7 +432,7 @@ void DHTBucketTest::testDropNode() { std::deque > tnodes = bucket.getNodes(); CPPUNIT_ASSERT_EQUAL((size_t)8, tnodes.size()); - CPPUNIT_ASSERT(nodes[3] == tnodes[3]); + CPPUNIT_ASSERT(*nodes[3] == *tnodes[3]); } bucket.cacheNode(cachedNode1); @@ -442,11 +442,13 @@ void DHTBucketTest::testDropNode() { std::deque > tnodes = bucket.getNodes(); CPPUNIT_ASSERT_EQUAL((size_t)8, tnodes.size()); - CPPUNIT_ASSERT(tnodes.end() == std::find(tnodes.begin(), tnodes.end(), nodes[3])); - CPPUNIT_ASSERT(cachedNode2 == tnodes[7]); + CPPUNIT_ASSERT(tnodes.end() == + std::find_if(tnodes.begin(), tnodes.end(), + derefEqual(nodes[3]))); + CPPUNIT_ASSERT(*cachedNode2 == *tnodes[7]); } CPPUNIT_ASSERT_EQUAL((size_t)1, bucket.getCachedNodes().size()); - CPPUNIT_ASSERT(cachedNode1 == bucket.getCachedNodes()[0]); + CPPUNIT_ASSERT(*cachedNode1 == *bucket.getCachedNodes()[0]); } } // namespace aria2 diff --git a/test/DHTFindNodeMessageTest.cc b/test/DHTFindNodeMessageTest.cc index c9f0ce54..984c7238 100644 --- a/test/DHTFindNodeMessageTest.cc +++ b/test/DHTFindNodeMessageTest.cc @@ -103,8 +103,8 @@ void DHTFindNodeMessageTest::testDoReceivedAction() SharedHandle m (dynamic_pointer_cast (dispatcher.messageQueue_[0].message_)); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("find_node"), m->getMessageType()); CPPUNIT_ASSERT_EQUAL(msg.getTransactionID(), m->getTransactionID()); CPPUNIT_ASSERT_EQUAL((size_t)1, m->nodes_.size()); diff --git a/test/DHTGetPeersMessageTest.cc b/test/DHTGetPeersMessageTest.cc index 11a280c1..be100ea2 100644 --- a/test/DHTGetPeersMessageTest.cc +++ b/test/DHTGetPeersMessageTest.cc @@ -124,8 +124,8 @@ void DHTGetPeersMessageTest::testDoReceivedAction() SharedHandle m (dynamic_pointer_cast (dispatcher.messageQueue_[0].message_)); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("get_peers"), m->getMessageType()); CPPUNIT_ASSERT_EQUAL(msg.getTransactionID(), m->getTransactionID()); CPPUNIT_ASSERT_EQUAL(tokenTracker.generateToken(infoHash, remoteNode->getIPAddress(), remoteNode->getPort()), m->token_); @@ -161,13 +161,13 @@ void DHTGetPeersMessageTest::testDoReceivedAction() SharedHandle m (dynamic_pointer_cast (dispatcher.messageQueue_[0].message_)); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("get_peers"), m->getMessageType()); CPPUNIT_ASSERT_EQUAL(msg.getTransactionID(), m->getTransactionID()); CPPUNIT_ASSERT_EQUAL(tokenTracker.generateToken(infoHash, remoteNode->getIPAddress(), remoteNode->getPort()), m->token_); CPPUNIT_ASSERT_EQUAL((size_t)1, m->nodes_.size()); - CPPUNIT_ASSERT(returnNode1 == m->nodes_[0]); + CPPUNIT_ASSERT(*returnNode1 == *m->nodes_[0]); CPPUNIT_ASSERT_EQUAL((size_t)0, m->peers_.size()); } } diff --git a/test/DHTIDCloserTest.cc b/test/DHTIDCloserTest.cc index 032aba6d..a5e3a944 100644 --- a/test/DHTIDCloserTest.cc +++ b/test/DHTIDCloserTest.cc @@ -58,11 +58,11 @@ void DHTIDCloserTest::testOperator() std::sort(entries.begin(), entries.end(), DHTIDCloser(e3->node->getID())); - CPPUNIT_ASSERT(e3 == entries[0]); - CPPUNIT_ASSERT(e2 == entries[1]); - CPPUNIT_ASSERT(e4 == entries[2]); - CPPUNIT_ASSERT(e1 == entries[3]); - CPPUNIT_ASSERT(e5 == entries[4]); + CPPUNIT_ASSERT(*e3 == *entries[0]); + CPPUNIT_ASSERT(*e2 == *entries[1]); + CPPUNIT_ASSERT(*e4 == *entries[2]); + CPPUNIT_ASSERT(*e1 == *entries[3]); + CPPUNIT_ASSERT(*e5 == *entries[4]); } } // namespace aria2 diff --git a/test/DHTMessageFactoryImplTest.cc b/test/DHTMessageFactoryImplTest.cc index c28b80de..f2515158 100644 --- a/test/DHTMessageFactoryImplTest.cc +++ b/test/DHTMessageFactoryImplTest.cc @@ -100,8 +100,8 @@ void DHTMessageFactoryImplTest::testCreatePingMessage() remoteNode->setIPAddress("192.168.0.1"); remoteNode->setPort(6881); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } @@ -125,8 +125,8 @@ void DHTMessageFactoryImplTest::testCreatePingReplyMessage() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } @@ -151,8 +151,8 @@ void DHTMessageFactoryImplTest::testCreateFindNodeMessage() remoteNode->setIPAddress("192.168.0.1"); remoteNode->setPort(6881); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); CPPUNIT_ASSERT_EQUAL(util::toHex(targetNodeID, DHT_ID_LENGTH), @@ -196,11 +196,11 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); - CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); - CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT(*nodes[0] == *m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(*nodes[7] == *m->getClosestKNodes()[7]); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } catch(Exception& e) { @@ -249,11 +249,11 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage6() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); - CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); - CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT(*nodes[0] == *m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(*nodes[7] == *m->getClosestKNodes()[7]); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } catch(Exception& e) { @@ -282,8 +282,8 @@ void DHTMessageFactoryImplTest::testCreateGetPeersMessage() remoteNode->setIPAddress("192.168.0.1"); remoteNode->setPort(6881); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); CPPUNIT_ASSERT_EQUAL(util::toHex(infoHash, DHT_ID_LENGTH), @@ -343,15 +343,15 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("token"), m->getToken()); CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); - CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); - CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT(*nodes[0] == *m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(*nodes[7] == *m->getClosestKNodes()[7]); CPPUNIT_ASSERT_EQUAL((size_t)4, m->getValues().size()); - CPPUNIT_ASSERT(peers[0] == m->getValues()[0]); - CPPUNIT_ASSERT(peers[3] == m->getValues()[3]); + CPPUNIT_ASSERT(*peers[0] == *m->getValues()[0]); + CPPUNIT_ASSERT(*peers[3] == *m->getValues()[3]); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } catch(Exception& e) { @@ -416,15 +416,15 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage6() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("token"), m->getToken()); CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); - CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); - CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT(*nodes[0] == *m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(*nodes[7] == *m->getClosestKNodes()[7]); CPPUNIT_ASSERT_EQUAL((size_t)4, m->getValues().size()); - CPPUNIT_ASSERT(peers[0] == m->getValues()[0]); - CPPUNIT_ASSERT(peers[3] == m->getValues()[3]); + CPPUNIT_ASSERT(*peers[0] == *m->getValues()[0]); + CPPUNIT_ASSERT(*peers[3] == *m->getValues()[3]); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } catch(Exception& e) { @@ -458,8 +458,8 @@ void DHTMessageFactoryImplTest::testCreateAnnouncePeerMessage() remoteNode->setIPAddress("192.168.0.1"); remoteNode->setPort(6882); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(token, m->getToken()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); @@ -490,8 +490,8 @@ void DHTMessageFactoryImplTest::testCreateAnnouncePeerReplyMessage() remoteNode->getIPAddress(), remoteNode->getPort()))); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } diff --git a/test/DHTPingMessageTest.cc b/test/DHTPingMessageTest.cc index dd12c20d..671a2734 100644 --- a/test/DHTPingMessageTest.cc +++ b/test/DHTPingMessageTest.cc @@ -92,8 +92,8 @@ void DHTPingMessageTest::testDoReceivedAction() SharedHandle m (dynamic_pointer_cast (dispatcher.messageQueue_[0].message_)); - CPPUNIT_ASSERT(localNode == m->getLocalNode()); - CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT(*localNode == *m->getLocalNode()); + CPPUNIT_ASSERT(*remoteNode == *m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("ping_reply"), m->getMessageType()); CPPUNIT_ASSERT_EQUAL(msg.getTransactionID(), m->getTransactionID()); } diff --git a/test/DefaultBtRequestFactoryTest.cc b/test/DefaultBtRequestFactoryTest.cc index 941fa0e4..43d4d0bc 100644 --- a/test/DefaultBtRequestFactoryTest.cc +++ b/test/DefaultBtRequestFactoryTest.cc @@ -210,16 +210,16 @@ void DefaultBtRequestFactoryTest::testRemoveTargetPiece() { requestFactory_->addTargetPiece(piece1); - CPPUNIT_ASSERT(std::find(requestFactory_->getTargetPieces().begin(), - requestFactory_->getTargetPieces().end(), - piece1) != + CPPUNIT_ASSERT(std::find_if(requestFactory_->getTargetPieces().begin(), + requestFactory_->getTargetPieces().end(), + derefEqual(piece1)) != requestFactory_->getTargetPieces().end()); requestFactory_->removeTargetPiece(piece1); - CPPUNIT_ASSERT(std::find(requestFactory_->getTargetPieces().begin(), - requestFactory_->getTargetPieces().end(), - piece1) == + CPPUNIT_ASSERT(std::find_if(requestFactory_->getTargetPieces().begin(), + requestFactory_->getTargetPieces().end(), + derefEqual(piece1)) == requestFactory_->getTargetPieces().end()); } diff --git a/test/DefaultPeerStorageTest.cc b/test/DefaultPeerStorageTest.cc index 9b1f7149..1394cf1f 100644 --- a/test/DefaultPeerStorageTest.cc +++ b/test/DefaultPeerStorageTest.cc @@ -121,7 +121,8 @@ void DefaultPeerStorageTest::testAddPeer() { CPPUNIT_ASSERT(ps.addPeer(peer4)); // peer2 was deleted. While peer1 is oldest, its cuid is not 0. CPPUNIT_ASSERT_EQUAL((size_t)3, ps.countPeer()); - CPPUNIT_ASSERT(std::find(ps.getPeers().begin(), ps.getPeers().end(), peer2) == ps.getPeers().end()); + CPPUNIT_ASSERT(std::find_if(ps.getPeers().begin(), ps.getPeers().end(), + derefEqual(peer2)) == ps.getPeers().end()); SharedHandle peer5(new Peer("192.168.0.4", 0)); @@ -224,13 +225,14 @@ void DefaultPeerStorageTest::testReturnPeer() ps.returnPeer(peer2); // peer2 removed from the container CPPUNIT_ASSERT_EQUAL((size_t)2, ps.getPeers().size()); - CPPUNIT_ASSERT(std::find(ps.getPeers().begin(), ps.getPeers().end(), peer2) - == ps.getPeers().end()); + CPPUNIT_ASSERT(std::find_if(ps.getPeers().begin(), ps.getPeers().end(), + derefEqual(peer2)) == ps.getPeers().end()); CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getDroppedPeers().size()); ps.returnPeer(peer1); // peer1 is removed from the container CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getPeers().size()); - CPPUNIT_ASSERT(std::find(ps.getPeers().begin(), ps.getPeers().end(), peer1) == ps.getPeers().end()); + CPPUNIT_ASSERT(std::find_if(ps.getPeers().begin(), ps.getPeers().end(), + derefEqual(peer1)) == ps.getPeers().end()); CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getDroppedPeers().size()); } diff --git a/test/SequentialPickerTest.cc b/test/SequentialPickerTest.cc index 171e201a..347e617f 100644 --- a/test/SequentialPickerTest.cc +++ b/test/SequentialPickerTest.cc @@ -35,7 +35,7 @@ void SequentialPickerTest::testPick() picker.pickNext(); CPPUNIT_ASSERT(picker.isPicked()); - CPPUNIT_ASSERT_EQUAL(Integer(new int(1)), picker.getPickedEntry()); + CPPUNIT_ASSERT_EQUAL(*Integer(new int(1)), *picker.getPickedEntry()); picker.dropPickedEntry(); @@ -44,7 +44,7 @@ void SequentialPickerTest::testPick() picker.pickNext(); - CPPUNIT_ASSERT_EQUAL(Integer(new int(2)), picker.getPickedEntry()); + CPPUNIT_ASSERT_EQUAL(*Integer(new int(2)), *picker.getPickedEntry()); CPPUNIT_ASSERT(!picker.hasNext()); } diff --git a/test/SingletonHolderTest.cc b/test/SingletonHolderTest.cc index 6b939824..b2dc2c84 100644 --- a/test/SingletonHolderTest.cc +++ b/test/SingletonHolderTest.cc @@ -51,7 +51,7 @@ void SingletonHolderTest::testInstance() IntHandle i(new int(100)); SingletonHolder::instance(i); - std::cerr << SingletonHolder::instance() << std::endl; + std::cerr << *SingletonHolder::instance() << std::endl; std::cerr << SingletonHolder::instance()->greeting() << std::endl;