diff --git a/ChangeLog b/ChangeLog index b0a732f1..5b26397a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-05-15 Tatsuhiro Tsujikawa + + Use erase+lower_bound+insert instead of sort. + * src/DefaultPieceStorage.cc (addPieceStats) + 2008-05-15 Tatsuhiro Tsujikawa Use A2STR::SHARP_C and A2STR::EQUAL_C. diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc index 8b622d6c..ad18cd03 100644 --- a/src/DefaultPieceStorage.cc +++ b/src/DefaultPieceStorage.cc @@ -701,19 +701,24 @@ void DefaultPieceStorage::updatePieceStats(const unsigned char* newBitfield, void DefaultPieceStorage::addPieceStats(size_t index) { - std::deque >::iterator cur = + SharedHandle pieceStat(_pieceStats[index]); + { + std::deque >::iterator cur = + std::lower_bound(_sortedPieceStats.begin(), _sortedPieceStats.end(), + pieceStat, PieceRarer()); + _sortedPieceStats.erase(cur); + } + pieceStat->addCount(); + + std::deque >::iterator to = std::lower_bound(_sortedPieceStats.begin(), _sortedPieceStats.end(), - _pieceStats[index], PieceRarer()); + pieceStat, PieceRarer()); - (*cur)->addCount(); + _sortedPieceStats.insert(to, pieceStat); - std::deque >::iterator last = - std::upper_bound(cur+1, _sortedPieceStats.end(), *cur, PieceRarer()); - - std::sort(cur, last, PieceRarer()); -// for(std::deque >::const_iterator i = _sortedPieceStats.begin(); i != _sortedPieceStats.end(); ++i) { -// logger->debug("index = %u, count = %u", (*i)->getIndex(), (*i)->getCount()); -// } +// for(std::deque >::const_iterator i = _sortedPieceStats.begin(); i != _sortedPieceStats.end(); ++i) { +// logger->debug("index = %u, count = %u", (*i)->getIndex(), (*i)->getCount()); +// } } PieceStat::PieceStat(size_t index):_order(0), _index(index), _count(0) {}