mirror of https://github.com/aria2/aria2
				
				
				
			Cleanup a2functional.h
Remove mem_fun_sh in favor of std::mem_fun. Remove unused functions. Use std::mem_fn instead of mem_fun_shpull/103/head
							parent
							
								
									50dcd6394c
								
							
						
					
					
						commit
						e791eb9ca3
					
				| 
						 | 
				
			
			@ -222,7 +222,8 @@ void DHTBucket::getGoodNodes
 | 
			
		|||
{
 | 
			
		||||
  goodNodes.insert(goodNodes.end(), nodes_.begin(), nodes_.end());
 | 
			
		||||
  goodNodes.erase(std::remove_if(goodNodes.begin(), goodNodes.end(),
 | 
			
		||||
                                 mem_fun_sh(&DHTNode::isBad)), goodNodes.end());
 | 
			
		||||
                                 std::mem_fn(&DHTNode::isBad)),
 | 
			
		||||
                  goodNodes.end());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::shared_ptr<DHTNode> DHTBucket::getNode(const unsigned char* nodeID, const std::string& ipaddr, uint16_t port) const
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ DHTTaskExecutor::~DHTTaskExecutor() {}
 | 
			
		|||
void DHTTaskExecutor::update()
 | 
			
		||||
{
 | 
			
		||||
  execTasks_.erase(std::remove_if(execTasks_.begin(), execTasks_.end(),
 | 
			
		||||
                                  mem_fun_sh(&DHTTask::finished)),
 | 
			
		||||
                                  std::mem_fn(&DHTTask::finished)),
 | 
			
		||||
                   execTasks_.end());
 | 
			
		||||
  int r;
 | 
			
		||||
  if(static_cast<size_t>(numConcurrent_) > execTasks_.size()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -408,7 +408,7 @@ void DefaultBtMessageDispatcher::addOutstandingRequest
 | 
			
		|||
size_t DefaultBtMessageDispatcher::countOutstandingUpload()
 | 
			
		||||
{
 | 
			
		||||
  return std::count_if(messageQueue_.begin(), messageQueue_.end(),
 | 
			
		||||
                       mem_fun_sh(&BtMessage::isUploading));
 | 
			
		||||
                       std::mem_fn(&BtMessage::isUploading));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultBtMessageDispatcher::setPeer(const std::shared_ptr<Peer>& peer)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ void DefaultBtRequestFactory::removeCompletedPiece() {
 | 
			
		|||
  std::for_each(pieces_.begin(), pieces_.end(),
 | 
			
		||||
                AbortCompletedPieceRequest(dispatcher_));
 | 
			
		||||
  pieces_.erase(std::remove_if(pieces_.begin(), pieces_.end(),
 | 
			
		||||
                              mem_fun_sh(&Piece::pieceComplete)),
 | 
			
		||||
                               std::mem_fn(&Piece::pieceComplete)),
 | 
			
		||||
               pieces_.end());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -259,7 +259,7 @@ void DefaultBtRequestFactory::getTargetPieceIndexes
 | 
			
		|||
(std::vector<size_t>& indexes) const
 | 
			
		||||
{
 | 
			
		||||
  std::transform(pieces_.begin(), pieces_.end(), std::back_inserter(indexes),
 | 
			
		||||
                 mem_fun_sh(&Piece::getIndex));
 | 
			
		||||
                 std::mem_fn(&Piece::getIndex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultBtRequestFactory::setPieceStorage
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,9 +125,11 @@ void DownloadContext::setFilePathWithIndex
 | 
			
		|||
 | 
			
		||||
void DownloadContext::setFileFilter(SegList<int>& sgl)
 | 
			
		||||
{
 | 
			
		||||
  using namespace std::placeholders;
 | 
			
		||||
 | 
			
		||||
  if(!sgl.hasNext() || fileEntries_.size() == 1) {
 | 
			
		||||
    std::for_each(fileEntries_.begin(), fileEntries_.end(),
 | 
			
		||||
                  std::bind2nd(mem_fun_sh(&FileEntry::setRequested), true));
 | 
			
		||||
                  std::bind(&FileEntry::setRequested, _1, true));
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  assert(sgl.peek() >= 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ Metalink2RequestGroup::createRequestGroup
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
  std::for_each(selectedEntries.begin(), selectedEntries.end(),
 | 
			
		||||
                mem_fun_sh(&MetalinkEntry::reorderMetaurlsByPriority));
 | 
			
		||||
                std::mem_fn(&MetalinkEntry::reorderMetaurlsByPriority));
 | 
			
		||||
  std::vector<std::pair<std::string,
 | 
			
		||||
    std::vector<std::shared_ptr<MetalinkEntry> > > > entryGroups;
 | 
			
		||||
  metalink::groupEntryByMetaurlName(entryGroups, selectedEntries);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -196,7 +196,7 @@ void MetalinkEntry::toFileEntry
 | 
			
		|||
{
 | 
			
		||||
  std::transform(metalinkEntries.begin(), metalinkEntries.end(),
 | 
			
		||||
                 std::back_inserter(fileEntries),
 | 
			
		||||
                 mem_fun_sh(&MetalinkEntry::getFile));
 | 
			
		||||
                 std::mem_fn(&MetalinkEntry::getFile));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MetalinkEntry::setSignature(const std::shared_ptr<Signature>& signature)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -493,12 +493,12 @@ void MetalinkParserController::commitChunkChecksumTransaction()
 | 
			
		|||
  if(!tEntry_->chunkChecksum ||
 | 
			
		||||
     MessageDigest::isStronger(tChunkChecksum_->getHashType(),
 | 
			
		||||
                               tEntry_->chunkChecksum->getHashType())) {
 | 
			
		||||
    std::sort(tempChunkChecksums_.begin(), tempChunkChecksums_.end(),
 | 
			
		||||
              Ascend1st<std::pair<size_t, std::string> >());
 | 
			
		||||
    std::sort(tempChunkChecksums_.begin(), tempChunkChecksums_.end());
 | 
			
		||||
    std::vector<std::string> pieceHashes;
 | 
			
		||||
    std::transform(tempChunkChecksums_.begin(), tempChunkChecksums_.end(),
 | 
			
		||||
                   std::back_inserter(pieceHashes),
 | 
			
		||||
                   select2nd<std::pair<size_t, std::string> >());
 | 
			
		||||
                   [](const std::pair<size_t, std::string>& p)
 | 
			
		||||
                   { return p.second; });
 | 
			
		||||
    tChunkChecksum_->setPieceHashes(pieceHashes);
 | 
			
		||||
    tEntry_->chunkChecksum = tChunkChecksum_;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -300,7 +300,7 @@ void MultiDiskAdaptor::openExistingFile()
 | 
			
		|||
void MultiDiskAdaptor::closeFile()
 | 
			
		||||
{
 | 
			
		||||
  std::for_each(diskWriterEntries_.begin(), diskWriterEntries_.end(),
 | 
			
		||||
                mem_fun_sh(&DiskWriterEntry::closeFile));
 | 
			
		||||
                std::mem_fn(&DiskWriterEntry::closeFile));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
| 
						 | 
				
			
			@ -520,7 +520,7 @@ void MultiDiskAdaptor::writeCache(const WrDiskCacheEntry* entry)
 | 
			
		|||
bool MultiDiskAdaptor::fileExists()
 | 
			
		||||
{
 | 
			
		||||
  return std::find_if(getFileEntries().begin(), getFileEntries().end(),
 | 
			
		||||
                      mem_fun_sh(&FileEntry::exists)) !=
 | 
			
		||||
                      std::mem_fn(&FileEntry::exists)) !=
 | 
			
		||||
    getFileEntries().end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -801,7 +801,7 @@ bool RequestGroupMan::isSameFileBeingDownloaded(RequestGroup* requestGroup) cons
 | 
			
		|||
        rg->getDownloadContext()->getFileEntries();
 | 
			
		||||
      std::transform(entries.begin(), entries.end(),
 | 
			
		||||
                     std::back_inserter(files),
 | 
			
		||||
                     mem_fun_sh(&FileEntry::getPath));
 | 
			
		||||
                     std::mem_fn(&FileEntry::getPath));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  std::sort(files.begin(), files.end());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,129 +46,6 @@
 | 
			
		|||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
// mem_fun_t for SharedHandle
 | 
			
		||||
template <class ReturnType, typename ClassType>
 | 
			
		||||
class mem_fun_sh_t:public std::unary_function< std::shared_ptr<ClassType>, ReturnType>
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  ReturnType (ClassType::*f)();
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  mem_fun_sh_t(ReturnType (ClassType::*f)()):f(f) {}
 | 
			
		||||
 | 
			
		||||
  ReturnType operator()(const std::shared_ptr<ClassType>& x) const
 | 
			
		||||
  {
 | 
			
		||||
    return (x.get()->*f)();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// const_mem_fun_t for SharedHandle
 | 
			
		||||
template <class ReturnType, typename ClassType>
 | 
			
		||||
class const_mem_fun_sh_t:public std::unary_function< std::shared_ptr<ClassType>, ReturnType>
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  ReturnType (ClassType::*f)() const;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  const_mem_fun_sh_t(ReturnType (ClassType::*f)() const):f(f) {}
 | 
			
		||||
 | 
			
		||||
  ReturnType operator()(const std::shared_ptr<ClassType>& x) const
 | 
			
		||||
  {
 | 
			
		||||
    return (x.get()->*f)();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <class ReturnType, typename ClassType>
 | 
			
		||||
mem_fun_sh_t<ReturnType, ClassType>
 | 
			
		||||
mem_fun_sh(ReturnType (ClassType::*f)())
 | 
			
		||||
{
 | 
			
		||||
  return mem_fun_sh_t<ReturnType, ClassType>(f);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <class ReturnType, typename ClassType>
 | 
			
		||||
const_mem_fun_sh_t<ReturnType, ClassType>
 | 
			
		||||
mem_fun_sh(ReturnType (ClassType::*f)() const)
 | 
			
		||||
{
 | 
			
		||||
  return const_mem_fun_sh_t<ReturnType, ClassType>(f);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// mem_fun1_t for SharedHandle
 | 
			
		||||
template<typename ReturnType, typename ClassType, typename ArgType>
 | 
			
		||||
class mem_fun1_sh_t:public std::binary_function<std::shared_ptr<ClassType>,
 | 
			
		||||
                                                ArgType,
 | 
			
		||||
                                                ReturnType>
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  ReturnType (ClassType::*f)(ArgType);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  mem_fun1_sh_t(ReturnType (ClassType::*f)(ArgType)):f(f) {}
 | 
			
		||||
 | 
			
		||||
  ReturnType operator()(const std::shared_ptr<ClassType>& x, ArgType a) const
 | 
			
		||||
  {
 | 
			
		||||
    return (x.get()->*f)(a);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename ReturnType, typename ClassType, typename ArgType>
 | 
			
		||||
mem_fun1_sh_t<ReturnType, ClassType, ArgType>
 | 
			
		||||
mem_fun_sh(ReturnType (ClassType::*f)(ArgType))
 | 
			
		||||
{
 | 
			
		||||
  return mem_fun1_sh_t<ReturnType, ClassType, ArgType>(f);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class BinaryOp, class UnaryOp>
 | 
			
		||||
class adopt2nd_t:public std::binary_function<typename BinaryOp::first_argument_type,
 | 
			
		||||
                                             typename UnaryOp::argument_type,
 | 
			
		||||
                                             typename BinaryOp::result_type> {
 | 
			
		||||
private:
 | 
			
		||||
  BinaryOp binaryOp_;
 | 
			
		||||
  UnaryOp unaryOp_;
 | 
			
		||||
public:
 | 
			
		||||
  adopt2nd_t(const BinaryOp& b, const UnaryOp& u):
 | 
			
		||||
    binaryOp_(b), unaryOp_(u) {}
 | 
			
		||||
 | 
			
		||||
  typename BinaryOp::result_type
 | 
			
		||||
  operator()(const typename BinaryOp::first_argument_type& x,
 | 
			
		||||
             const typename UnaryOp::argument_type& y)
 | 
			
		||||
  {
 | 
			
		||||
    return binaryOp_(x, unaryOp_(y));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <class BinaryOp, class UnaryOp>
 | 
			
		||||
inline adopt2nd_t<BinaryOp, UnaryOp>
 | 
			
		||||
adopt2nd(const BinaryOp& binaryOp, const UnaryOp& unaryOp)
 | 
			
		||||
{
 | 
			
		||||
  return adopt2nd_t<BinaryOp, UnaryOp>(binaryOp, unaryOp);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename Pair>
 | 
			
		||||
class Ascend1st:public std::binary_function<Pair, Pair, bool>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  bool operator()(const Pair& p1, const Pair& p2) const
 | 
			
		||||
  {
 | 
			
		||||
    return p1.first < p2.first;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename Pair>
 | 
			
		||||
class select2nd
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  typename Pair::second_type operator()(const Pair& p) const
 | 
			
		||||
  {
 | 
			
		||||
    return p.second;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  typename Pair::second_type operator()(Pair& p) const
 | 
			
		||||
  {
 | 
			
		||||
    return p.second;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class Deleter {
 | 
			
		||||
public:
 | 
			
		||||
  template<class T>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,42 +11,13 @@ namespace aria2 {
 | 
			
		|||
class a2functionalTest:public CppUnit::TestFixture {
 | 
			
		||||
 | 
			
		||||
  CPPUNIT_TEST_SUITE(a2functionalTest);
 | 
			
		||||
  CPPUNIT_TEST(testMemFunSh);
 | 
			
		||||
  CPPUNIT_TEST(testAdopt2nd);
 | 
			
		||||
  CPPUNIT_TEST(testStrjoin);
 | 
			
		||||
  CPPUNIT_TEST(testLeastRecentAccess);
 | 
			
		||||
  CPPUNIT_TEST_SUITE_END();
 | 
			
		||||
public:
 | 
			
		||||
  void testMemFunSh();
 | 
			
		||||
  void testAdopt2nd();
 | 
			
		||||
  void testStrjoin();
 | 
			
		||||
  void testLeastRecentAccess();
 | 
			
		||||
 | 
			
		||||
  class Greeting {
 | 
			
		||||
  public:
 | 
			
		||||
    virtual ~Greeting() {}
 | 
			
		||||
 | 
			
		||||
    virtual std::string sayGreeting() = 0;
 | 
			
		||||
 | 
			
		||||
    virtual std::string sayGreetingConst() const = 0;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  typedef std::shared_ptr<Greeting> GreetingHandle;
 | 
			
		||||
 | 
			
		||||
  class JapaneseGreeting:public Greeting
 | 
			
		||||
  {
 | 
			
		||||
    virtual std::string sayGreeting()
 | 
			
		||||
    {
 | 
			
		||||
      return "HAROO WAARUDO";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual std::string sayGreetingConst() const
 | 
			
		||||
    {
 | 
			
		||||
      return "HAROO WAARUDO";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  struct LastAccess {
 | 
			
		||||
    time_t lastAccess_;
 | 
			
		||||
    LastAccess(time_t lastAccess):lastAccess_(lastAccess) {}
 | 
			
		||||
| 
						 | 
				
			
			@ -58,27 +29,8 @@ public:
 | 
			
		|||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CPPUNIT_TEST_SUITE_REGISTRATION(a2functionalTest);
 | 
			
		||||
 | 
			
		||||
void a2functionalTest::testMemFunSh()
 | 
			
		||||
{
 | 
			
		||||
  GreetingHandle greeting(new JapaneseGreeting());
 | 
			
		||||
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("HAROO WAARUDO"), mem_fun_sh(&Greeting::sayGreeting)(greeting));
 | 
			
		||||
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("HAROO WAARUDO"), mem_fun_sh(&Greeting::sayGreetingConst)(greeting));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void a2functionalTest::testAdopt2nd()
 | 
			
		||||
{
 | 
			
		||||
  GreetingHandle greeting(new JapaneseGreeting());
 | 
			
		||||
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("A Japanese said:HAROO WAARUDO"),
 | 
			
		||||
                       adopt2nd(std::plus<std::string>(), mem_fun_sh(&Greeting::sayGreeting))("A Japanese said:", greeting));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void a2functionalTest::testStrjoin()
 | 
			
		||||
{
 | 
			
		||||
  std::vector<std::string> v;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue