Sfoglia il codice sorgente

2009-06-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Added countSeeder() function which counts seeder in the given
	iterator range. Use it in ConsoleStatCalc and XmlRpcMethodImpl.
	* src/ConsoleStatCalc.cc
	* src/Peer.h
	* src/XmlRpcMethodImpl.cc
	* test/PeerTest.cc
Tatsuhiro Tsujikawa 16 anni fa
parent
commit
b922020985
5 ha cambiato i file con 40 aggiunte e 4 eliminazioni
  1. 9 0
      ChangeLog
  2. 1 1
      src/ConsoleStatCalc.cc
  3. 8 0
      src/Peer.h
  4. 1 3
      src/XmlRpcMethodImpl.cc
  5. 21 0
      test/PeerTest.cc

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+2009-06-07  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Added countSeeder() function which counts seeder in the given
+	iterator range. Use it in ConsoleStatCalc and XmlRpcMethodImpl.
+	* src/ConsoleStatCalc.cc
+	* src/Peer.h
+	* src/XmlRpcMethodImpl.cc
+	* test/PeerTest.cc
+
 2009-06-06  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Documented missing seeder in getPeers xml-rpc method.

+ 1 - 1
src/ConsoleStatCalc.cc

@@ -120,7 +120,7 @@ static void printProgress
     std::deque<SharedHandle<Peer> > peers;
     ps->getActivePeers(peers);
     o << " " << "SEED:"
-      << std::count_if(peers.begin(), peers.end(), mem_fun_sh(&Peer::isSeeder));
+      << countSeeder(peers.begin(), peers.end());
   }
 #endif // ENABLE_BITTORRENT
 

+ 8 - 0
src/Peer.h

@@ -40,11 +40,13 @@
 #include <cassert>
 #include <string>
 #include <deque>
+#include <algorithm>
 
 #include "SharedHandle.h"
 #include "TimeA2.h"
 #include "BtConstants.h"
 #include "PeerStat.h"
+#include "a2functional.h"
 
 namespace aria2 {
 
@@ -289,6 +291,12 @@ public:
   size_t countOutstandingUpload() const;
 };
 
+template<typename InputIterator>
+size_t countSeeder(InputIterator first, InputIterator last)
+{
+  return std::count_if(first, last, mem_fun_sh(&Peer::isSeeder));
+}
+
 typedef SharedHandle<Peer> PeerHandle;
 typedef std::deque<PeerHandle> Peers;
 

+ 1 - 3
src/XmlRpcMethodImpl.cc

@@ -293,9 +293,7 @@ static void gatherProgressBitTorrent
 
   std::deque<SharedHandle<Peer> > peers;
   peerStorage->getActivePeers(peers);
-  entryDict["numSeeders"] =
-    Util::uitos(std::count_if(peers.begin(), peers.end(),
-			      mem_fun_sh(&Peer::isSeeder)));
+  entryDict["numSeeders"] = countSeeder(peers.begin(), peers.end());
 }
 
 static void gatherPeer(BDE& peers, const SharedHandle<PeerStorage>& ps)

+ 21 - 0
test/PeerTest.cc

@@ -10,6 +10,7 @@ class PeerTest:public CppUnit::TestFixture {
   CPPUNIT_TEST(testAmAllowedIndexSet);
   CPPUNIT_TEST(testGetId);
   CPPUNIT_TEST(testOperatorEqual);
+  CPPUNIT_TEST(testCountSeeder);
   CPPUNIT_TEST_SUITE_END();
 private:
   SharedHandle<Peer> peer;
@@ -23,6 +24,7 @@ public:
   void testAmAllowedIndexSet();
   void testGetId();
   void testOperatorEqual();
+  void testCountSeeder();
 };
 
 
@@ -57,4 +59,23 @@ void PeerTest::testOperatorEqual()
   }
 }
 
+void PeerTest::testCountSeeder()
+{
+  std::vector<SharedHandle<Peer> > peers(5);
+  peers[0].reset(new Peer("192.168.0.1", 7000));
+  peers[1].reset(new Peer("192.168.0.2", 7000));
+  peers[2].reset(new Peer("192.168.0.3", 7000));
+  peers[3].reset(new Peer("192.168.0.4", 7000));
+  peers[4].reset(new Peer("192.168.0.5", 7000));
+  for(std::vector<SharedHandle<Peer> >::iterator i = peers.begin();
+      i != peers.end(); ++i) {
+    (*i)->allocateSessionResource(1024, 1024*8);
+  }
+  unsigned char bitfield[] = { 0xff };
+  peers[1]->setBitfield(bitfield, 1);
+  peers[3]->setBitfield(bitfield, 1);
+  peers[4]->setBitfield(bitfield, 1);
+  CPPUNIT_ASSERT_EQUAL((size_t)3, countSeeder(peers.begin(), peers.end()));
+}
+
 } // namespace aria2