summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-04-15 23:54:10 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-04-15 23:54:10 +0900
commit2e0e8ed0e5722de51a30885d4a4f164deeb842a7 (patch)
tree261937fab924358a7a265155b13ccac65a771ad2 /src
parent302bdfd9a0d5b199f8dffa323b5b29fe7ca2745b (diff)
Amend
Diffstat (limited to 'src')
-rw-r--r--src/CheckIntegrityMan.cc53
-rw-r--r--src/CheckIntegrityMan.h9
-rw-r--r--src/Makefile.am2
-rw-r--r--src/RequestGroupEntry.h1
-rw-r--r--src/RpcMethodImpl.cc23
-rw-r--r--src/SequentialPicker.h17
6 files changed, 34 insertions, 71 deletions
diff --git a/src/CheckIntegrityMan.cc b/src/CheckIntegrityMan.cc
deleted file mode 100644
index 1a7f438a..00000000
--- a/src/CheckIntegrityMan.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-/* <!-- copyright */
-/*
- * aria2 - The high speed download utility
- *
- * Copyright (C) 2006 Tatsuhiro Tsujikawa
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of portions of this program with the
- * OpenSSL library under certain conditions as described in each
- * individual source file, and distribute linked combinations
- * including the two.
- * You must obey the GNU General Public License in all respects
- * for all of the code used other than OpenSSL. If you modify
- * file(s) with this exception, you may extend this exception to your
- * version of the file(s), but you are not obligated to do so. If you
- * do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source
- * files in the program, then also delete it here.
- */
-/* copyright --> */
-#include "CheckIntegrityMan.h"
-#include "CheckIntegrityEntry.h"
-
-namespace aria2 {
-
-bool CheckIntegrityMan::isPicked(std::shared_ptr<RequestGroup> rg) {
- return pickedEntry_ && rg && pickedEntry_->getRequestGroup() == rg.get();
-}
-
-bool CheckIntegrityMan::isQueued(std::shared_ptr<RequestGroup> rg) {
- bool found = false;
- for(auto& e : entries_) {
- if(e && rg && e->getRequestGroup() == rg.get())
- found = true;
- }
- return found;
-}
-
-}
diff --git a/src/CheckIntegrityMan.h b/src/CheckIntegrityMan.h
index 611910aa..2ea3b097 100644
--- a/src/CheckIntegrityMan.h
+++ b/src/CheckIntegrityMan.h
@@ -41,15 +41,8 @@
namespace aria2 {
class CheckIntegrityEntry;
-class RequestGroup;
-class CheckIntegrityMan : public SequentialPicker<CheckIntegrityEntry> {
-public:
- bool isPicked(std::shared_ptr<RequestGroup> rg);
- bool isQueued(std::shared_ptr<RequestGroup> rg);
-};
-
-// typedef SequentialPicker<CheckIntegrityEntry> CheckIntegrityMan;
+typedef SequentialPicker<CheckIntegrityEntry> CheckIntegrityMan;
} // namespace aria2
diff --git a/src/Makefile.am b/src/Makefile.am
index d87a31c4..8614834a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -39,7 +39,7 @@ SRCS = \
CheckIntegrityCommand.cc CheckIntegrityCommand.h\
CheckIntegrityDispatcherCommand.cc CheckIntegrityDispatcherCommand.h\
CheckIntegrityEntry.cc CheckIntegrityEntry.h\
- CheckIntegrityMan.cc CheckIntegrityMan.h\
+ CheckIntegrityMan.h\
Checksum.cc Checksum.h\
ChecksumCheckIntegrityEntry.cc ChecksumCheckIntegrityEntry.h\
ChunkChecksum.cc ChunkChecksum.h\
diff --git a/src/RequestGroupEntry.h b/src/RequestGroupEntry.h
index 7a1416c7..7484bf48 100644
--- a/src/RequestGroupEntry.h
+++ b/src/RequestGroupEntry.h
@@ -37,7 +37,6 @@
#include "common.h"
-#include "Command.h"
#include <memory>
namespace aria2 {
diff --git a/src/RpcMethodImpl.cc b/src/RpcMethodImpl.cc
index cdb4fb1f..d808d83c 100644
--- a/src/RpcMethodImpl.cc
+++ b/src/RpcMethodImpl.cc
@@ -796,13 +796,22 @@ void gatherProgress(Dict* entryDict, const std::shared_ptr<RequestGroup>& group,
e->getBtRegistry()->get(group->getGID()), keys);
}
#endif // ENABLE_BITTORRENT
- if (e && e->getCheckIntegrityMan()) {
- if (e->getCheckIntegrityMan()->isPicked(group)) {
- entryDict->put(KEY_VERIFIED_LENGTH, util::itos(e->getCheckIntegrityMan()->getPickedEntry()->getCurrentLength()));
- }
- if (e->getCheckIntegrityMan()->isQueued(group)) {
- entryDict->put(KEY_VERIFY_PENDING, VLB_TRUE);
- }
+ if (e->getCheckIntegrityMan()) {
+ if (e->getCheckIntegrityMan()->isPicked(
+ [&group](const CheckIntegrityEntry& ent) {
+ return ent.getRequestGroup() == group.get();
+ })) {
+ entryDict->put(
+ KEY_VERIFIED_LENGTH,
+ util::itos(
+ e->getCheckIntegrityMan()->getPickedEntry()->getCurrentLength()));
+ }
+ if (e->getCheckIntegrityMan()->isQueued(
+ [&group](const CheckIntegrityEntry& ent) {
+ return ent.getRequestGroup() == group.get();
+ })) {
+ entryDict->put(KEY_VERIFY_PENDING, VLB_TRUE);
+ }
}
}
} // namespace
diff --git a/src/SequentialPicker.h b/src/SequentialPicker.h
index c464be78..eb4489b0 100644
--- a/src/SequentialPicker.h
+++ b/src/SequentialPicker.h
@@ -43,7 +43,7 @@
namespace aria2 {
template <typename T> class SequentialPicker {
-protected:
+private:
std::deque<std::unique_ptr<T>> entries_;
std::unique_ptr<T> pickedEntry_;
@@ -72,6 +72,21 @@ public:
}
size_t countEntryInQueue() const { return entries_.size(); }
+
+ bool isPicked(const std::function<bool(const T&)>& pred) const
+ {
+ return pickedEntry_ && pred(*pickedEntry_);
+ }
+
+ bool isQueued(const std::function<bool(const T&)>& pred) const
+ {
+ for (auto& e : entries_) {
+ if (pred(*e)) {
+ return true;
+ }
+ }
+ return false;
+ }
};
} // namespace aria2