summaryrefslogtreecommitdiff
path: root/src/Metalinker.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-12 22:59:49 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-12 23:09:23 +0900
commit41121e09f7cf6ed4a95797a80da63bca1d4884cd (patch)
treeb48e6a1c9603d92728652e7a4238f0d894a9aab0 /src/Metalinker.cc
parent59e63d956ee63d99202b67a32e8a277f3b04650d (diff)
Use std::unique_ptr for Metalink objects
Diffstat (limited to 'src/Metalinker.cc')
-rw-r--r--src/Metalinker.cc66
1 files changed, 21 insertions, 45 deletions
diff --git a/src/Metalinker.cc b/src/Metalinker.cc
index 70e8fcfa..91bb145e 100644
--- a/src/Metalinker.cc
+++ b/src/Metalinker.cc
@@ -43,56 +43,32 @@ Metalinker::Metalinker() {}
Metalinker::~Metalinker() {}
-namespace {
-class EntryQuery:
- public std::unary_function<std::shared_ptr<MetalinkEntry>, bool> {
-private:
- std::string version;
- std::string language;
- std::string os;
-public:
- EntryQuery(const std::string& version,
- const std::string& language,
- const std::string& os):
- version(version),
- language(language),
- os(os) {}
-
- bool operator()(const std::shared_ptr<MetalinkEntry>& entry) const {
- if(!version.empty()) {
- if(version != entry->version) {
- return false;
- }
- }
- if(!language.empty()) {
- if(!entry->containsLanguage(language)) {
- return false;
- }
- }
- if(!os.empty()) {
- if(!entry->containsOS(os)) {
- return false;
- }
+std::vector<std::unique_ptr<MetalinkEntry>>
+Metalinker::queryEntry(const std::string& version,
+ const std::string& language,
+ const std::string& os)
+{
+ std::vector<std::unique_ptr<MetalinkEntry>> res;
+ for(auto& entry : entries_) {
+ if((!version.empty() && version != entry->version) ||
+ (!language.empty() && !entry->containsLanguage(language)) ||
+ (!os.empty() && !entry->containsOS(os))) {
+ continue;
}
- return true;
+ res.push_back(std::move(entry));
}
-};
-} // namespace
-
-void Metalinker::queryEntry
-(std::vector<std::shared_ptr<MetalinkEntry> >& queryResult,
- const std::string& version,
- const std::string& language,
- const std::string& os) const
-{
- std::remove_copy_if(entries_.begin(), entries_.end(),
- std::back_inserter(queryResult),
- std::not1(EntryQuery(version, language, os)));
+ entries_.erase(std::remove_if(std::begin(entries_), std::end(entries_),
+ [](const std::unique_ptr<MetalinkEntry>& entry)
+ {
+ return !entry.get();
+ }),
+ std::end(entries_));
+ return res;
}
-void Metalinker::addEntry(const std::shared_ptr<MetalinkEntry>& entry)
+void Metalinker::addEntry(std::unique_ptr<MetalinkEntry> entry)
{
- entries_.push_back(entry);
+ entries_.push_back(std::move(entry));
}
} // namespace aria2