Browse Source

2008-05-11 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Changed method signature:
	PeerStorage::getActivePeers
	* src/DHTPeerAnnounceEntry.cc
	* src/DefaultPeerStorage.cc
	* src/DefaultPeerStorage.h
	* src/PeerStorage.h
	* test/DefaultPeerStorageTest.cc
	* test/MockPeerStorage.h
Tatsuhiro Tsujikawa 17 years ago
parent
commit
05f0646112

+ 11 - 0
ChangeLog

@@ -1,3 +1,14 @@
+2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Changed method signature:
+	PeerStorage::getActivePeers
+	* src/DHTPeerAnnounceEntry.cc
+	* src/DefaultPeerStorage.cc
+	* src/DefaultPeerStorage.h
+	* src/PeerStorage.h
+	* test/DefaultPeerStorageTest.cc
+	* test/MockPeerStorage.h
+
 2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Changed method signature:

+ 1 - 2
src/DHTPeerAnnounceEntry.cc

@@ -112,8 +112,7 @@ void DHTPeerAnnounceEntry::getPeers(std::deque<SharedHandle<Peer> >& peers) cons
   if(!_btCtx.isNull()) {
     SharedHandle<PeerStorage> peerStorage = PEER_STORAGE(_btCtx);
     if(!peerStorage.isNull()) {
-      const Peers& activePeers = peerStorage->getActivePeers();
-      peers.insert(peers.end(), activePeers.begin(), activePeers.end());
+      peerStorage->getActivePeers(peers);
     }
   }
 }

+ 12 - 8
src/DefaultPeerStorage.cc

@@ -162,20 +162,22 @@ bool DefaultPeerStorage::isPeerAvailable() {
 
 class CollectActivePeer {
 private:
-  Peers _activePeers;
+  std::deque<SharedHandle<Peer> >& _activePeers;
 public:
-  void operator()(const PeerHandle& peer)
+  CollectActivePeer(std::deque<SharedHandle<Peer> >& activePeers):
+    _activePeers(activePeers) {}
+
+  void operator()(const SharedHandle<Peer>& peer)
   {
     if(peer->isActive()) {
       _activePeers.push_back(peer);
     }
   }
-
-  const Peers& getActivePeers() { return _activePeers; }
 };
 
-Peers DefaultPeerStorage::getActivePeers() {
-  return std::for_each(peers.begin(), peers.end(), CollectActivePeer()).getActivePeers();
+void DefaultPeerStorage::getActivePeers(std::deque<SharedHandle<Peer> >& activePeers)
+{
+  std::for_each(peers.begin(), peers.end(), CollectActivePeer(activePeers));
 }
 
 class CalculateStat {
@@ -267,10 +269,12 @@ bool DefaultPeerStorage::chokeRoundIntervalElapsed()
 
 void DefaultPeerStorage::executeChoke()
 {
+  std::deque<SharedHandle<Peer> > activePeers;
+  getActivePeers(activePeers);
   if(PIECE_STORAGE(btContext)->downloadFinished()) {
-    return _seederStateChoke->executeChoke(getActivePeers());
+    return _seederStateChoke->executeChoke(activePeers);
   } else {
-    return _leecherStateChoke->executeChoke(getActivePeers());
+    return _leecherStateChoke->executeChoke(activePeers);
   }
 }
 

+ 1 - 1
src/DefaultPeerStorage.h

@@ -90,7 +90,7 @@ public:
 
   virtual bool isPeerAvailable();
 
-  virtual std::deque<SharedHandle<Peer> > getActivePeers();
+  virtual void getActivePeers(std::deque<SharedHandle<Peer> >& peers);
 
   virtual TransferStat calculateStat();
 

+ 1 - 1
src/PeerStorage.h

@@ -78,7 +78,7 @@ public:
   /**
    * Returns the list of peers which are currently connected from localhost.
    */
-  virtual std::deque<SharedHandle<Peer> > getActivePeers() = 0;
+  virtual void getActivePeers(std::deque<SharedHandle<Peer> >& peers) = 0;
 
   /**
    * Calculates current download/upload statistics.

+ 19 - 8
test/DefaultPeerStorageTest.cc

@@ -174,20 +174,31 @@ void DefaultPeerStorageTest::testIsPeerAvailable() {
 void DefaultPeerStorageTest::testActivatePeer() {
   DefaultPeerStorage ps(btContext, option);
 
-  CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
+  {
+    std::deque<SharedHandle<Peer> > peers;
+    ps.getActivePeers(peers);
+    CPPUNIT_ASSERT_EQUAL((size_t)0, peers.size());
+  }
 
   SharedHandle<Peer> peer1(new Peer("192.168.0.1", 6889));
 
   ps.addPeer(peer1);
 
-  std::deque<SharedHandle<Peer> > activePeer = ps.getActivePeers();
-
-  CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
+  {
+    std::deque<SharedHandle<Peer> > activePeers;
+    ps.getActivePeers(activePeers);
 
-  peer1->allocateSessionResource(btContext->getPieceLength(),
-				 btContext->getTotalLength());
-
-  CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getActivePeers().size());
+    CPPUNIT_ASSERT_EQUAL((size_t)0, activePeers.size());
+  }
+  {
+    peer1->allocateSessionResource(btContext->getPieceLength(),
+				   btContext->getTotalLength());
+
+    std::deque<SharedHandle<Peer> > activePeers;
+    ps.getActivePeers(activePeers);
+    
+    CPPUNIT_ASSERT_EQUAL((size_t)1, activePeers.size());
+  }
 }
 
 void DefaultPeerStorageTest::testCalculateStat() {

+ 2 - 2
test/MockPeerStorage.h

@@ -42,8 +42,8 @@ public:
     this->activePeers = activePeers;
   }
 
-  virtual std::deque<SharedHandle<Peer> > getActivePeers() {
-    return activePeers;
+  virtual void getActivePeers(std::deque<SharedHandle<Peer> >& peers) {
+    peers.insert(peers.end(), activePeers.begin(), activePeers.end());
   }
 
   virtual TransferStat calculateStat() {