瀏覽代碼

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

	Rewritten AccRequestGroup
	* src/main.cc
Tatsuhiro Tsujikawa 17 年之前
父節點
當前提交
3884d710d3
共有 2 個文件被更改,包括 20 次插入27 次删除
  1. 5 0
      ChangeLog
  2. 15 27
      src/main.cc

+ 5 - 0
ChangeLog

@@ -1,3 +1,8 @@
+2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Rewritten AccRequestGroup
+	* src/main.cc
+
 2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Rewritten.

+ 15 - 27
src/main.cc

@@ -200,14 +200,16 @@ int32_t downloadMetalink(Option* op)
 
 class AccRequestGroup {
 private:
+  std::deque<SharedHandle<RequestGroup> >& _requestGroups;
   ProtocolDetector _detector;
   Option* _op;
 public:
-  AccRequestGroup(Option* op):_op(op) {}
+  AccRequestGroup(std::deque<SharedHandle<RequestGroup> >& requestGroups,
+		  Option* op):
+    _requestGroups(requestGroups), _op(op) {}
 
-  std::deque<SharedHandle<RequestGroup> >&
-  operator()(std::deque<SharedHandle<RequestGroup> >& groups,
-	     const std::string& uri)
+  void
+  operator()(const std::string& uri)
   {
     if(_detector.isStreamProtocol(uri)) {
       std::deque<std::string> xuris;
@@ -215,13 +217,13 @@ public:
 	xuris.push_back(uri);
       }
       RequestGroupHandle rg = createRequestGroup(_op, xuris);
-      groups.push_back(rg);
+      _requestGroups.push_back(rg);
     }
 #ifdef ENABLE_BITTORRENT
     else if(_detector.guessTorrentFile(uri)) {
       try {
-	groups.push_back(createBtRequestGroup(uri, _op,
-					      std::deque<std::string>()));
+	_requestGroups.push_back(createBtRequestGroup(uri, _op,
+						      std::deque<std::string>()));
       } catch(RecoverableException& e) {
 	// error occurred while parsing torrent file.
 	// We simply ignore it.	
@@ -234,7 +236,7 @@ public:
       try {
 	std::deque<SharedHandle<RequestGroup> > metalinkGroups =
 	  Metalink2RequestGroup(_op).generate(uri);
-	groups.insert(groups.end(), metalinkGroups.begin(), metalinkGroups.end());
+	_requestGroups.insert(_requestGroups.end(), metalinkGroups.begin(), metalinkGroups.end());
       } catch(RecoverableException& e) {
 	// error occurred while parsing metalink file.
 	// We simply ignore it.
@@ -245,7 +247,6 @@ public:
     else {
       LogFactory::getInstance()->error(MSG_UNRECOGNIZED_URI, (uri).c_str());
     }
-    return groups;
   }
 };
 
@@ -257,17 +258,10 @@ int32_t downloadUriList(Option* op, std::istream& in)
     std::deque<std::string> uris = p.parseNext(in);
     if(uris.size() == 1 && op->get(PREF_PARAMETERIZED_URI) == V_TRUE) {
       std::deque<std::string> unfoldedURIs = unfoldURI(uris);
-      std::deque<SharedHandle<RequestGroup> > thisGroups =
-	std::accumulate(unfoldedURIs.begin(), unfoldedURIs.end(),
-			std::deque<SharedHandle<RequestGroup> >(),
-			AccRequestGroup(op));
-      groups.insert(groups.end(), thisGroups.begin(), thisGroups.end());
+      std::for_each(unfoldedURIs.begin(), unfoldedURIs.end(),
+		    AccRequestGroup(groups, op));
     } else if(uris.size() == 1) {
-      std::deque<SharedHandle<RequestGroup> > thisGroups =
-	std::accumulate(uris.begin(), uris.end(),
-			std::deque<SharedHandle<RequestGroup> >(),
-			AccRequestGroup(op));
-      groups.insert(groups.end(), thisGroups.begin(), thisGroups.end());
+      std::for_each(uris.begin(), uris.end(), AccRequestGroup(groups, op));
     } else if(uris.size() > 0) {
       std::deque<std::string> xuris;
       ncopy(uris.begin(), uris.end(), op->getAsInt(PREF_SPLIT),
@@ -313,9 +307,7 @@ int32_t downloadUri(Option* op, const std::deque<std::string>& uris)
   }
   RequestGroups groups;
   if(op->get(PREF_FORCE_SEQUENTIAL) == V_TRUE) {
-    groups = std::accumulate(nargs.begin(), nargs.end(),
-			     std::deque<SharedHandle<RequestGroup> >(),
-			     AccRequestGroup(op));
+    std::for_each(nargs.begin(), nargs.end(), AccRequestGroup(groups, op));
   } else {
     std::deque<std::string>::iterator strmProtoEnd =
       std::stable_partition(nargs.begin(), nargs.end(), StreamProtocolFilter());
@@ -328,11 +320,7 @@ int32_t downloadUri(Option* op, const std::deque<std::string>& uris)
       groups.push_back(rg);
     }
     // process remaining URIs(local metalink, BitTorrent files)
-    std::deque<SharedHandle<RequestGroup> > remGroups =
-      std::accumulate(strmProtoEnd, nargs.end(),
-		      std::deque<SharedHandle<RequestGroup> >(),
-		      AccRequestGroup(op));
-    groups.insert(groups.end(), remGroups.begin(), remGroups.end());
+    std::for_each(strmProtoEnd, nargs.end(), AccRequestGroup(groups, op));
   }
   return MultiUrlRequestInfo(groups, op, getStatCalc(op), getSummaryOut(op)).execute();
 }