summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-10-05 14:51:05 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-10-05 14:51:05 +0000
commit967dade8b2b498d5a4c562b98608a95b4c339f4f (patch)
tree5ac3050d981405c0736aac98f088e77f5985fc7d /src
parent5f1d8c789755f35eb90376f810672432fbfdf060 (diff)
2009-10-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Code clean up * src/BtPostDownloadHandler.cc * src/ContentTypeRequestGroupCriteria.cc * src/ContentTypeRequestGroupCriteria.h * src/DownloadHandlerConstants.cc * src/DownloadHandlerConstants.h * src/DownloadHandlerFactory.cc * src/MetalinkPostDownloadHandler.cc
Diffstat (limited to 'src')
-rw-r--r--src/BtPostDownloadHandler.cc11
-rw-r--r--src/ContentTypeRequestGroupCriteria.cc51
-rw-r--r--src/ContentTypeRequestGroupCriteria.h22
-rw-r--r--src/DownloadHandlerConstants.cc18
-rw-r--r--src/DownloadHandlerConstants.h10
-rw-r--r--src/DownloadHandlerFactory.cc14
-rw-r--r--src/MetalinkPostDownloadHandler.cc10
7 files changed, 70 insertions, 66 deletions
diff --git a/src/BtPostDownloadHandler.cc b/src/BtPostDownloadHandler.cc
index 14d3c4ae..1916f01c 100644
--- a/src/BtPostDownloadHandler.cc
+++ b/src/BtPostDownloadHandler.cc
@@ -52,8 +52,11 @@ namespace aria2 {
BtPostDownloadHandler::BtPostDownloadHandler()
{
SharedHandle<RequestGroupCriteria> cri
- (new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getBtContentTypes(),
- DownloadHandlerConstants::getBtExtensions()));
+ (new ContentTypeRequestGroupCriteria
+ (DownloadHandlerConstants::getBtContentTypes().begin(),
+ DownloadHandlerConstants::getBtContentTypes().end(),
+ DownloadHandlerConstants::getBtExtensions().begin(),
+ DownloadHandlerConstants::getBtExtensions().end()));
setCriteria(cri);
}
@@ -79,8 +82,8 @@ void BtPostDownloadHandler::getNextRequestGroups
}
SharedHandle<DownloadContext> context(new DownloadContext());
context->setDir(requestGroup->getDownloadContext()->getDir());
- bittorrent::loadFromMemory(content, context,
- File(requestGroup->getFirstFilePath()).getBasename());
+ bittorrent::loadFromMemory
+ (content, context, File(requestGroup->getFirstFilePath()).getBasename());
rg->setDownloadContext(context);
context->setOwnerRequestGroup(rg.get());
diff --git a/src/ContentTypeRequestGroupCriteria.cc b/src/ContentTypeRequestGroupCriteria.cc
index d479bc88..1b9ade2c 100644
--- a/src/ContentTypeRequestGroupCriteria.cc
+++ b/src/ContentTypeRequestGroupCriteria.cc
@@ -33,6 +33,9 @@
*/
/* copyright --> */
#include "ContentTypeRequestGroupCriteria.h"
+
+#include <algorithm>
+
#include "RequestGroup.h"
#include "Util.h"
#include "FileEntry.h"
@@ -40,45 +43,33 @@
namespace aria2 {
-ContentTypeRequestGroupCriteria::ContentTypeRequestGroupCriteria(const std::deque<std::string>& contentTypes,
- const std::deque<std::string>& extensions):
- _contentTypes(contentTypes),
- _extensions(extensions) {}
-
-ContentTypeRequestGroupCriteria::~ContentTypeRequestGroupCriteria() {}
-
-bool ContentTypeRequestGroupCriteria::match(const RequestGroup* requestGroup) const
+template<typename InputIterator>
+bool tailMatch
+(InputIterator first, InputIterator last, const std::string& target)
{
- if(requestGroup->getDownloadContext()->getFileEntries().size() != 1) {
- return false;
- }
- if(forwardMatch(requestGroup->getFirstFilePath(), _extensions)) {
- return true;
- } else {
- return exactMatch
- (requestGroup->getDownloadContext()->getFirstFileEntry()->getContentType(),
- _contentTypes);
- }
-}
-
-bool ContentTypeRequestGroupCriteria::forwardMatch(const std::string& target, const std::deque<std::string>& candidates) const
-{
- for(std::deque<std::string>::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) {
- if(Util::endsWith(target, *itr)) {
+ for(; first != last; ++first) {
+ if(Util::endsWith(target, *first)) {
return true;
}
}
return false;
}
-bool ContentTypeRequestGroupCriteria::exactMatch(const std::string& target, const std::deque<std::string>& candidates) const
+bool ContentTypeRequestGroupCriteria::match
+(const RequestGroup* requestGroup) const
{
- for(std::deque<std::string>::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) {
- if(target == *itr) {
- return true;
- }
+ if(requestGroup->getDownloadContext()->getFileEntries().size() != 1) {
+ return false;
+ }
+ if(tailMatch(_extensions.begin(), _extensions.end(),
+ requestGroup->getFirstFilePath())) {
+ return true;
+ } else {
+ return
+ std::find(_contentTypes.begin(), _contentTypes.end(),
+ requestGroup->getDownloadContext()->getFirstFileEntry()->
+ getContentType()) != _contentTypes.end();
}
- return false;
}
} // namespace aria2
diff --git a/src/ContentTypeRequestGroupCriteria.h b/src/ContentTypeRequestGroupCriteria.h
index f1775d9a..6d1fa26a 100644
--- a/src/ContentTypeRequestGroupCriteria.h
+++ b/src/ContentTypeRequestGroupCriteria.h
@@ -37,25 +37,23 @@
#include "RequestGroupCriteria.h"
#include <string>
-#include <deque>
+#include <vector>
namespace aria2 {
class ContentTypeRequestGroupCriteria:public RequestGroupCriteria
{
private:
- std::deque<std::string> _contentTypes;
- std::deque<std::string> _extensions;
-
- bool forwardMatch(const std::string& target, const std::deque<std::string>& candidates) const;
-
- bool exactMatch(const std::string& target, const std::deque<std::string>& candidates) const;
-
+ std::vector<std::string> _contentTypes;
+ std::vector<std::string> _extensions;
public:
- ContentTypeRequestGroupCriteria(const std::deque<std::string>& contentTypes,
- const std::deque<std::string>& extensions);
-
- virtual ~ContentTypeRequestGroupCriteria();
+ template<typename InputIterator>
+ ContentTypeRequestGroupCriteria(InputIterator contentTypeFirst,
+ InputIterator contentTypeLast,
+ InputIterator extensionFirst,
+ InputIterator extensionLast):
+ _contentTypes(contentTypeFirst, contentTypeLast),
+ _extensions(extensionFirst, extensionLast) {}
virtual bool match(const RequestGroup* requestGroup) const;
};
diff --git a/src/DownloadHandlerConstants.cc b/src/DownloadHandlerConstants.cc
index 457f5a38..9fb3b73a 100644
--- a/src/DownloadHandlerConstants.cc
+++ b/src/DownloadHandlerConstants.cc
@@ -49,33 +49,35 @@ const char* DownloadHandlerConstants::BT_CONTENT_TYPES[] = {
"application/x-bittorrent"
};
-const std::deque<std::string>& DownloadHandlerConstants::getMetalinkExtensions()
+const std::vector<std::string>&
+DownloadHandlerConstants::getMetalinkExtensions()
{
- static const std::deque<std::string> l
+ static const std::vector<std::string> l
(&METALINK_EXTENSIONS[0],
&METALINK_EXTENSIONS[arrayLength(METALINK_EXTENSIONS)]);
return l;
}
-const std::deque<std::string>& DownloadHandlerConstants::getMetalinkContentTypes()
+const std::vector<std::string>&
+DownloadHandlerConstants::getMetalinkContentTypes()
{
- static const std::deque<std::string> l
+ static const std::vector<std::string> l
(&METALINK_CONTENT_TYPES[0],
&METALINK_CONTENT_TYPES[arrayLength(METALINK_CONTENT_TYPES)]);
return l;
}
-const std::deque<std::string>& DownloadHandlerConstants::getBtExtensions()
+const std::vector<std::string>& DownloadHandlerConstants::getBtExtensions()
{
- static const std::deque<std::string> l
+ static const std::vector<std::string> l
(&BT_EXTENSIONS[0],
&BT_EXTENSIONS[arrayLength(BT_EXTENSIONS)]);
return l;
}
-const std::deque<std::string>& DownloadHandlerConstants::getBtContentTypes()
+const std::vector<std::string>& DownloadHandlerConstants::getBtContentTypes()
{
- static const std::deque<std::string> l
+ static const std::vector<std::string> l
(&BT_CONTENT_TYPES[0],
&BT_CONTENT_TYPES[arrayLength(BT_CONTENT_TYPES)]);
return l;
diff --git a/src/DownloadHandlerConstants.h b/src/DownloadHandlerConstants.h
index 4a8699a0..61c20f1a 100644
--- a/src/DownloadHandlerConstants.h
+++ b/src/DownloadHandlerConstants.h
@@ -37,7 +37,7 @@
#include "common.h"
#include <string>
-#include <deque>
+#include <vector>
namespace aria2 {
@@ -46,19 +46,19 @@ class DownloadHandlerConstants
public:
static const char* METALINK_EXTENSIONS[];
- static const std::deque<std::string>& getMetalinkExtensions();
+ static const std::vector<std::string>& getMetalinkExtensions();
static const char* METALINK_CONTENT_TYPES[];
- static const std::deque<std::string>& getMetalinkContentTypes();
+ static const std::vector<std::string>& getMetalinkContentTypes();
static const char* BT_EXTENSIONS[];
- static const std::deque<std::string>& getBtExtensions();
+ static const std::vector<std::string>& getBtExtensions();
static const char* BT_CONTENT_TYPES[];
- static const std::deque<std::string>& getBtContentTypes();
+ static const std::vector<std::string>& getBtContentTypes();
};
} // namespace aria2
diff --git a/src/DownloadHandlerFactory.cc b/src/DownloadHandlerFactory.cc
index 8be13559..15a8cd98 100644
--- a/src/DownloadHandlerFactory.cc
+++ b/src/DownloadHandlerFactory.cc
@@ -70,8 +70,11 @@ DownloadHandlerFactory::getMetalinkPreDownloadHandler()
_metalinkPreDownloadHandler.reset(new MemoryBufferPreDownloadHandler());
RequestGroupCriteriaHandle criteria
- (new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getMetalinkContentTypes(),
- DownloadHandlerConstants::getMetalinkExtensions()));
+ (new ContentTypeRequestGroupCriteria
+ (DownloadHandlerConstants::getMetalinkContentTypes().begin(),
+ DownloadHandlerConstants::getMetalinkContentTypes().end(),
+ DownloadHandlerConstants::getMetalinkExtensions().begin(),
+ DownloadHandlerConstants::getMetalinkExtensions().end()));
_metalinkPreDownloadHandler->setCriteria(criteria);
}
return _metalinkPreDownloadHandler;
@@ -97,8 +100,11 @@ DownloadHandlerFactory::getBtPreDownloadHandler()
_btPreDownloadHandler.reset(new MemoryBufferPreDownloadHandler());
RequestGroupCriteriaHandle criteria
- (new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getBtContentTypes(),
- DownloadHandlerConstants::getBtExtensions()));
+ (new ContentTypeRequestGroupCriteria
+ (DownloadHandlerConstants::getBtContentTypes().begin(),
+ DownloadHandlerConstants::getBtContentTypes().end(),
+ DownloadHandlerConstants::getBtExtensions().begin(),
+ DownloadHandlerConstants::getBtExtensions().end()));
_btPreDownloadHandler->setCriteria(criteria);
}
return _btPreDownloadHandler;
diff --git a/src/MetalinkPostDownloadHandler.cc b/src/MetalinkPostDownloadHandler.cc
index 038a3687..eda93afd 100644
--- a/src/MetalinkPostDownloadHandler.cc
+++ b/src/MetalinkPostDownloadHandler.cc
@@ -50,8 +50,11 @@ namespace aria2 {
MetalinkPostDownloadHandler::MetalinkPostDownloadHandler()
{
SharedHandle<RequestGroupCriteria> cri
- (new ContentTypeRequestGroupCriteria(DownloadHandlerConstants::getMetalinkContentTypes(),
- DownloadHandlerConstants::getMetalinkExtensions()));
+ (new ContentTypeRequestGroupCriteria
+ (DownloadHandlerConstants::getMetalinkContentTypes().begin(),
+ DownloadHandlerConstants::getMetalinkContentTypes().end(),
+ DownloadHandlerConstants::getMetalinkExtensions().begin(),
+ DownloadHandlerConstants::getMetalinkExtensions().end()));
setCriteria(cri);
}
@@ -63,7 +66,8 @@ void MetalinkPostDownloadHandler::getNextRequestGroups
{
_logger->debug("Generating RequestGroups for Metalink file %s",
requestGroup->getFirstFilePath().c_str());
- SharedHandle<DiskAdaptor> diskAdaptor = requestGroup->getPieceStorage()->getDiskAdaptor();
+ SharedHandle<DiskAdaptor> diskAdaptor =
+ requestGroup->getPieceStorage()->getDiskAdaptor();
try {
diskAdaptor->openExistingFile();
//requestOption.put(PREF_DIR, requestGroup->getDownloadContext()->getDir());