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) {
std::shared_ptr<UnionSeedCriteria> unionCri(new UnionSeedCriteria());
auto unionCri = make_unique<UnionSeedCriteria>();
if(option->defined(PREF_SEED_TIME)) {
std::shared_ptr<SeedCriteria> cri
(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60));
unionCri->addSeedCriteria(cri);
unionCri->addSeedCriteria(make_unique<TimeSeedCriteria>
(option->getAsInt(PREF_SEED_TIME)*60));
}
{
double ratio = option->getAsDouble(PREF_SEED_RATIO);
if(ratio > 0.0) {
std::shared_ptr<ShareRatioSeedCriteria> cri
(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO),
requestGroup->getDownloadContext()));
auto cri = make_unique<ShareRatioSeedCriteria>
(option->getAsDouble(PREF_SEED_RATIO),
requestGroup->getDownloadContext());
cri->setPieceStorage(pieceStorage);
cri->setBtRuntime(btRuntime);
unionCri->addSeedCriteria(cri);
unionCri->addSeedCriteria(std::move(cri));
}
}
if(!unionCri->getSeedCriterion().empty()) {
auto c = make_unique<SeedCheckCommand>
(e->newCUID(), requestGroup, e, unionCri);
(e->newCUID(), requestGroup, e, std::move(unionCri));
c->setPieceStorage(pieceStorage);
c->setBtRuntime(btRuntime);
commands.push_back(std::move(c));

View File

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

View File

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

View File

@ -38,44 +38,29 @@
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() {}
void UnionSeedCriteria::reset()
{
std::for_each(criterion_.begin(), criterion_.end(), Reset());
for(const auto& c : criterion_) {
c->reset();
}
}
bool UnionSeedCriteria::evaluate()
{
std::vector<std::shared_ptr<SeedCriteria> >::iterator itr =
std::find_if(criterion_.begin(), criterion_.end(), Eval());
return itr != criterion_.end();
for(const auto& c : criterion_) {
if(c->evaluate()) {
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

View File

@ -44,7 +44,7 @@ namespace aria2 {
class UnionSeedCriteria : public SeedCriteria {
private:
std::vector<std::shared_ptr<SeedCriteria> > criterion_;
std::vector<std::unique_ptr<SeedCriteria>> criterion_;
public:
UnionSeedCriteria();
virtual ~UnionSeedCriteria();
@ -53,9 +53,9 @@ public:
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_;
}