Use std::unique_ptr for UnionSeedCriteria

pull/103/head
Tatsuhiro Tsujikawa 2013-06-23 22:07:25 +09:00
parent fa9f3fb5a3
commit c0b60eb087
5 changed files with 26 additions and 50 deletions

View File

@ -156,27 +156,26 @@ void BtSetup::setup(std::vector<std::unique_ptr<Command>>& commands,
} }
} }
if(!metadataGetMode) { if(!metadataGetMode) {
std::shared_ptr<UnionSeedCriteria> unionCri(new UnionSeedCriteria()); auto unionCri = make_unique<UnionSeedCriteria>();
if(option->defined(PREF_SEED_TIME)) { if(option->defined(PREF_SEED_TIME)) {
std::shared_ptr<SeedCriteria> cri unionCri->addSeedCriteria(make_unique<TimeSeedCriteria>
(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60)); (option->getAsInt(PREF_SEED_TIME)*60));
unionCri->addSeedCriteria(cri);
} }
{ {
double ratio = option->getAsDouble(PREF_SEED_RATIO); double ratio = option->getAsDouble(PREF_SEED_RATIO);
if(ratio > 0.0) { if(ratio > 0.0) {
std::shared_ptr<ShareRatioSeedCriteria> cri auto cri = make_unique<ShareRatioSeedCriteria>
(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO), (option->getAsDouble(PREF_SEED_RATIO),
requestGroup->getDownloadContext())); requestGroup->getDownloadContext());
cri->setPieceStorage(pieceStorage); cri->setPieceStorage(pieceStorage);
cri->setBtRuntime(btRuntime); cri->setBtRuntime(btRuntime);
unionCri->addSeedCriteria(cri); unionCri->addSeedCriteria(std::move(cri));
} }
} }
if(!unionCri->getSeedCriterion().empty()) { if(!unionCri->getSeedCriterion().empty()) {
auto c = make_unique<SeedCheckCommand> auto c = make_unique<SeedCheckCommand>
(e->newCUID(), requestGroup, e, unionCri); (e->newCUID(), requestGroup, e, std::move(unionCri));
c->setPieceStorage(pieceStorage); c->setPieceStorage(pieceStorage);
c->setBtRuntime(btRuntime); c->setBtRuntime(btRuntime);
commands.push_back(std::move(c)); commands.push_back(std::move(c));

View File

@ -49,11 +49,11 @@ SeedCheckCommand::SeedCheckCommand
(cuid_t cuid, (cuid_t cuid,
RequestGroup* requestGroup, RequestGroup* requestGroup,
DownloadEngine* e, DownloadEngine* e,
const std::shared_ptr<SeedCriteria>& seedCriteria) std::unique_ptr<SeedCriteria> seedCriteria)
: Command(cuid), : Command(cuid),
requestGroup_(requestGroup), requestGroup_(requestGroup),
e_(e), e_(e),
seedCriteria_(seedCriteria), seedCriteria_(std::move(seedCriteria)),
checkStarted_(false) checkStarted_(false)
{ {
setStatusRealtime(); setStatusRealtime();
@ -88,12 +88,6 @@ bool SeedCheckCommand::execute() {
return false; return false;
} }
void SeedCheckCommand::setSeedCriteria
(const std::shared_ptr<SeedCriteria>& seedCriteria)
{
seedCriteria_ = seedCriteria;
}
void SeedCheckCommand::setBtRuntime(const std::shared_ptr<BtRuntime>& btRuntime) void SeedCheckCommand::setBtRuntime(const std::shared_ptr<BtRuntime>& btRuntime)
{ {
btRuntime_ = btRuntime; btRuntime_ = btRuntime;

View File

@ -54,20 +54,18 @@ private:
DownloadEngine* e_; DownloadEngine* e_;
std::shared_ptr<PieceStorage> pieceStorage_; std::shared_ptr<PieceStorage> pieceStorage_;
std::shared_ptr<BtRuntime> btRuntime_; std::shared_ptr<BtRuntime> btRuntime_;
std::shared_ptr<SeedCriteria> seedCriteria_; std::unique_ptr<SeedCriteria> seedCriteria_;
bool checkStarted_; bool checkStarted_;
public: public:
SeedCheckCommand(cuid_t cuid, SeedCheckCommand(cuid_t cuid,
RequestGroup* requestGroup, RequestGroup* requestGroup,
DownloadEngine* e, DownloadEngine* e,
const std::shared_ptr<SeedCriteria>& seedCriteria); std::unique_ptr<SeedCriteria> seedCriteria);
virtual ~SeedCheckCommand(); virtual ~SeedCheckCommand();
virtual bool execute(); virtual bool execute();
void setSeedCriteria(const std::shared_ptr<SeedCriteria>& seedCriteria);
void setBtRuntime(const std::shared_ptr<BtRuntime>& btRuntime); void setBtRuntime(const std::shared_ptr<BtRuntime>& btRuntime);
void setPieceStorage(const std::shared_ptr<PieceStorage>& pieceStorage); void setPieceStorage(const std::shared_ptr<PieceStorage>& pieceStorage);

View File

@ -38,44 +38,29 @@
namespace aria2 { namespace aria2 {
namespace {
class Reset {
public:
void operator()(const std::shared_ptr<SeedCriteria>& cri)
{
cri->reset();
}
};
} // namespace
namespace {
class Eval {
public:
bool operator()(const std::shared_ptr<SeedCriteria>& cri)
{
return cri->evaluate();
}
};
} // namespace
UnionSeedCriteria::UnionSeedCriteria() {} UnionSeedCriteria::UnionSeedCriteria() {}
UnionSeedCriteria::~UnionSeedCriteria() {} UnionSeedCriteria::~UnionSeedCriteria() {}
void UnionSeedCriteria::reset() void UnionSeedCriteria::reset()
{ {
std::for_each(criterion_.begin(), criterion_.end(), Reset()); for(const auto& c : criterion_) {
c->reset();
}
} }
bool UnionSeedCriteria::evaluate() bool UnionSeedCriteria::evaluate()
{ {
std::vector<std::shared_ptr<SeedCriteria> >::iterator itr = for(const auto& c : criterion_) {
std::find_if(criterion_.begin(), criterion_.end(), Eval()); if(c->evaluate()) {
return itr != criterion_.end(); return true;
}
}
return false;
} }
void UnionSeedCriteria::addSeedCriteria(const std::shared_ptr<SeedCriteria>& cri) void UnionSeedCriteria::addSeedCriteria(std::unique_ptr<SeedCriteria> cri)
{ {
criterion_.push_back(cri); criterion_.push_back(std::move(cri));
} }
} // namespace aria2 } // namespace aria2

View File

@ -44,7 +44,7 @@ namespace aria2 {
class UnionSeedCriteria : public SeedCriteria { class UnionSeedCriteria : public SeedCriteria {
private: private:
std::vector<std::shared_ptr<SeedCriteria> > criterion_; std::vector<std::unique_ptr<SeedCriteria>> criterion_;
public: public:
UnionSeedCriteria(); UnionSeedCriteria();
virtual ~UnionSeedCriteria(); virtual ~UnionSeedCriteria();
@ -53,9 +53,9 @@ public:
virtual bool evaluate(); virtual bool evaluate();
void addSeedCriteria(const std::shared_ptr<SeedCriteria>& cri); void addSeedCriteria(std::unique_ptr<SeedCriteria> cri);
const std::vector<std::shared_ptr<SeedCriteria> >& getSeedCriterion() const const std::vector<std::unique_ptr<SeedCriteria>>& getSeedCriterion() const
{ {
return criterion_; return criterion_;
} }