diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-12 22:59:49 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-12 23:09:23 +0900 |
| commit | 41121e09f7cf6ed4a95797a80da63bca1d4884cd (patch) | |
| tree | b48e6a1c9603d92728652e7a4238f0d894a9aab0 /src/Metalinker.cc | |
| parent | 59e63d956ee63d99202b67a32e8a277f3b04650d (diff) | |
Use std::unique_ptr for Metalink objects
Diffstat (limited to 'src/Metalinker.cc')
| -rw-r--r-- | src/Metalinker.cc | 66 |
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 |
