AnnounceList, AnnounceTier: Code cleanup using C++11 features

pull/235/merge
Tatsuhiro Tsujikawa 2014-06-06 00:04:37 +09:00
parent aff92b5115
commit e2ff45f326
4 changed files with 52 additions and 52 deletions

View File

@ -45,13 +45,13 @@ namespace aria2 {
AnnounceList::AnnounceList():currentTrackerInitialized_(false) {} AnnounceList::AnnounceList():currentTrackerInitialized_(false) {}
AnnounceList::AnnounceList AnnounceList::AnnounceList
(const std::vector<std::vector<std::string> >& announceList): (const std::vector<std::vector<std::string>>& announceList):
currentTrackerInitialized_(false) { currentTrackerInitialized_(false) {
reconfigure(announceList); reconfigure(announceList);
} }
AnnounceList::AnnounceList AnnounceList::AnnounceList
(const std::deque<std::shared_ptr<AnnounceTier> >& announceTiers): (const std::deque<std::shared_ptr<AnnounceTier>>& announceTiers):
tiers_(announceTiers), currentTrackerInitialized_(false) { tiers_(announceTiers), currentTrackerInitialized_(false) {
resetIterator(); resetIterator();
} }
@ -59,31 +59,31 @@ AnnounceList::AnnounceList
AnnounceList::~AnnounceList() {} AnnounceList::~AnnounceList() {}
void AnnounceList::reconfigure void AnnounceList::reconfigure
(const std::vector<std::vector<std::string> >& announceList) (const std::vector<std::vector<std::string>>& announceList)
{ {
for (const auto& vec: announceList) { for (const auto& vec: announceList) {
if(vec.empty()) { if(vec.empty()) {
continue; continue;
} }
std::deque<std::string> urls(vec.begin(), vec.end());
std::shared_ptr<AnnounceTier> tier(new AnnounceTier(urls)); std::deque<std::string> uris(std::begin(vec), std::end(vec));
tiers_.push_back(tier); auto tier =
std::make_shared<AnnounceTier>(std::move(uris));
tiers_.push_back(std::move(tier));
} }
resetIterator(); resetIterator();
} }
void AnnounceList::reconfigure(const std::string& url) { void AnnounceList::reconfigure(const std::string& url) {
std::deque<std::string> urls; std::deque<std::string> urls{ url };
urls.push_back(url); tiers_.push_back(std::make_shared<AnnounceTier>(std::move(urls)));
std::shared_ptr<AnnounceTier> tier(new AnnounceTier(urls));
tiers_.push_back(tier);
resetIterator(); resetIterator();
} }
void AnnounceList::resetIterator() { void AnnounceList::resetIterator() {
currentTier_ = tiers_.begin(); currentTier_ = std::begin(tiers_);
if(currentTier_ != tiers_.end() && (*currentTier_)->urls.size()) { if(currentTier_ != std::end(tiers_) && (*currentTier_)->urls.size()) {
currentTracker_ = (*currentTier_)->urls.begin(); currentTracker_ = std::begin((*currentTier_)->urls);
currentTrackerInitialized_ = true; currentTrackerInitialized_ = true;
} else { } else {
currentTrackerInitialized_ = false; currentTrackerInitialized_ = false;
@ -101,25 +101,25 @@ std::string AnnounceList::getAnnounce() const {
void AnnounceList::announceSuccess() { void AnnounceList::announceSuccess() {
if(currentTrackerInitialized_) { if(currentTrackerInitialized_) {
(*currentTier_)->nextEvent(); (*currentTier_)->nextEvent();
std::string url = *currentTracker_; auto url = *currentTracker_;
(*currentTier_)->urls.erase(currentTracker_); (*currentTier_)->urls.erase(currentTracker_);
(*currentTier_)->urls.push_front(url); (*currentTier_)->urls.push_front(std::move(url));
currentTier_ = tiers_.begin(); currentTier_ = std::begin(tiers_);
currentTracker_ = (*currentTier_)->urls.begin(); currentTracker_ = std::begin((*currentTier_)->urls);
} }
} }
void AnnounceList::announceFailure() { void AnnounceList::announceFailure() {
if(currentTrackerInitialized_) { if(currentTrackerInitialized_) {
++currentTracker_; ++currentTracker_;
if(currentTracker_ == (*currentTier_)->urls.end()) { if(currentTracker_ == std::end((*currentTier_)->urls)) {
// force next event // force next event
(*currentTier_)->nextEventIfAfterStarted(); (*currentTier_)->nextEventIfAfterStarted();
++currentTier_; ++currentTier_;
if(currentTier_ == tiers_.end()) { if(currentTier_ == std::end(tiers_)) {
currentTrackerInitialized_ = false; currentTrackerInitialized_ = false;
} else { } else {
currentTracker_ = (*currentTier_)->urls.begin(); currentTracker_ = std::begin((*currentTier_)->urls);
} }
} }
} }
@ -190,46 +190,46 @@ public:
} // namespace } // namespace
size_t AnnounceList::countStoppedAllowedTier() const { size_t AnnounceList::countStoppedAllowedTier() const {
return count_if(tiers_.begin(), tiers_.end(), FindStoppedAllowedTier()); return count_if(std::begin(tiers_), std::end(tiers_),
FindStoppedAllowedTier());
} }
size_t AnnounceList::countCompletedAllowedTier() const { size_t AnnounceList::countCompletedAllowedTier() const {
return count_if(tiers_.begin(), tiers_.end(), FindCompletedAllowedTier()); return count_if(std::begin(tiers_), std::end(tiers_),
FindCompletedAllowedTier());
} }
void AnnounceList::setCurrentTier void AnnounceList::setCurrentTier
(const std::deque<std::shared_ptr<AnnounceTier> >::iterator& itr) { (std::deque<std::shared_ptr<AnnounceTier>>::iterator itr) {
if(itr != tiers_.end()) { if(itr != std::end(tiers_)) {
currentTier_ = itr; currentTier_ = std::move(itr);
currentTracker_ = (*currentTier_)->urls.begin(); currentTracker_ = std::begin((*currentTier_)->urls);
} }
} }
void AnnounceList::moveToStoppedAllowedTier() { void AnnounceList::moveToStoppedAllowedTier() {
auto itr = find_wrap_if(tiers_.begin(), tiers_.end(), currentTier_, auto itr = find_wrap_if(std::begin(tiers_), std::end(tiers_), currentTier_,
FindStoppedAllowedTier()); FindStoppedAllowedTier());
setCurrentTier(itr); setCurrentTier(std::move(itr));
} }
void AnnounceList::moveToCompletedAllowedTier() { void AnnounceList::moveToCompletedAllowedTier() {
auto itr = auto itr = find_wrap_if(std::begin(tiers_), std::end(tiers_), currentTier_,
find_wrap_if(tiers_.begin(), tiers_.end(), FindCompletedAllowedTier());
currentTier_, setCurrentTier(std::move(itr));
FindCompletedAllowedTier());
setCurrentTier(itr);
} }
void AnnounceList::shuffle() { void AnnounceList::shuffle() {
for (const auto& tier: tiers_) { for (const auto& tier: tiers_) {
auto& urls = tier->urls; auto& urls = tier->urls;
std::random_shuffle(urls.begin(), urls.end(), std::random_shuffle(std::begin(urls), std::end(urls),
*SimpleRandomizer::getInstance()); *SimpleRandomizer::getInstance());
} }
} }
bool AnnounceList::allTiersFailed() const bool AnnounceList::allTiersFailed() const
{ {
return currentTier_ == tiers_.end(); return currentTier_ == std::end(tiers_);
} }
void AnnounceList::resetTier() void AnnounceList::resetTier()
@ -241,18 +241,18 @@ bool AnnounceList::currentTierAcceptsStoppedEvent() const
{ {
if(currentTrackerInitialized_) { if(currentTrackerInitialized_) {
return FindStoppedAllowedTier()(*currentTier_); return FindStoppedAllowedTier()(*currentTier_);
} else {
return false;
} }
return false;
} }
bool AnnounceList::currentTierAcceptsCompletedEvent() const bool AnnounceList::currentTierAcceptsCompletedEvent() const
{ {
if(currentTrackerInitialized_) { if(currentTrackerInitialized_) {
return FindCompletedAllowedTier()(*currentTier_); return FindCompletedAllowedTier()(*currentTier_);
} else {
return false;
} }
return false;
} }
size_t AnnounceList::countTier() const size_t AnnounceList::countTier() const

View File

@ -50,25 +50,25 @@ namespace aria2 {
class AnnounceList { class AnnounceList {
public: public:
private: private:
std::deque<std::shared_ptr<AnnounceTier> > tiers_; std::deque<std::shared_ptr<AnnounceTier>> tiers_;
std::deque<std::shared_ptr<AnnounceTier> >::iterator currentTier_; std::deque<std::shared_ptr<AnnounceTier>>::iterator currentTier_;
std::deque<std::string>::iterator currentTracker_; std::deque<std::string>::iterator currentTracker_;
bool currentTrackerInitialized_; bool currentTrackerInitialized_;
void resetIterator(); void resetIterator();
void setCurrentTier void setCurrentTier
(const std::deque<std::shared_ptr<AnnounceTier> >::iterator& itr); (std::deque<std::shared_ptr<AnnounceTier>>::iterator itr);
public: public:
AnnounceList(); AnnounceList();
AnnounceList(const std::vector<std::vector<std::string> >& announceList); AnnounceList(const std::vector<std::vector<std::string>>& announceList);
AnnounceList(const std::deque<std::shared_ptr<AnnounceTier> >& tiers); AnnounceList(const std::deque<std::shared_ptr<AnnounceTier>>& tiers);
~AnnounceList(); ~AnnounceList();
// Don't allow copying // Don't allow copying
AnnounceList(const AnnounceList&); AnnounceList(const AnnounceList&) = delete;
AnnounceList& operator=(const AnnounceList&); AnnounceList& operator=(const AnnounceList&) = delete;
void reconfigure(const std::vector<std::vector<std::string> >& announceList); void reconfigure(const std::vector<std::vector<std::string>>& announceList);
void reconfigure(const std::string& url); void reconfigure(const std::string& url);
size_t countTier() const; size_t countTier() const;

View File

@ -36,8 +36,8 @@
namespace aria2 { namespace aria2 {
AnnounceTier::AnnounceTier(const std::deque<std::string>& urls) AnnounceTier::AnnounceTier(std::deque<std::string> urls)
: event(STARTED), urls(urls) : event(STARTED), urls(std::move(urls))
{} {}
AnnounceTier::~AnnounceTier() {} AnnounceTier::~AnnounceTier() {}

View File

@ -57,13 +57,13 @@ public:
AnnounceEvent event; AnnounceEvent event;
std::deque<std::string> urls; std::deque<std::string> urls;
AnnounceTier(const std::deque<std::string>& urls); AnnounceTier(std::deque<std::string> urls);
~AnnounceTier(); ~AnnounceTier();
// Don't allow copying // Don't allow copying
AnnounceTier(const AnnounceTier&); AnnounceTier(const AnnounceTier&) = delete;
AnnounceTier& operator=(const AnnounceTier&); AnnounceTier& operator=(const AnnounceTier&) = delete;
void nextEvent(); void nextEvent();