Browse Source

Use boost:circular_buffer instead of QList.

QList has to store an additional pointer for each element which leads to bad space efficiency.
adaptive-webui-19844
Chocobo1 9 years ago
parent
commit
f13c604fbe
  1. 14
      src/base/bittorrent/private/speedmonitor.cpp
  2. 10
      src/base/bittorrent/private/speedmonitor.h

14
src/base/bittorrent/private/speedmonitor.cpp

@ -27,17 +27,21 @@ @@ -27,17 +27,21 @@
* exception statement from your version.
*/
#include <QList>
#include "speedmonitor.h"
SpeedMonitor::SpeedMonitor()
: m_speedSamples(MAX_SAMPLES)
{
}
void SpeedMonitor::addSample(const SpeedSample &sample)
{
m_speedSamples.push_back(sample);
m_sum += sample;
if (m_speedSamples.size() > MAX_SAMPLES) {
if (m_speedSamples.size() >= MAX_SAMPLES) {
m_sum -= m_speedSamples.front();
m_speedSamples.pop_front();
}
m_speedSamples.push_back(sample);
m_sum += sample;
}
SpeedSampleAvg SpeedMonitor::average() const

10
src/base/bittorrent/private/speedmonitor.h

@ -30,7 +30,11 @@ @@ -30,7 +30,11 @@
#ifndef SPEEDMONITOR_H
#define SPEEDMONITOR_H
template<typename T> class QList;
#ifndef Q_MOC_RUN
#include <boost/circular_buffer.hpp>
#endif
#include <QtGlobal>
template<typename T>
struct Sample
@ -71,13 +75,15 @@ typedef Sample<qreal> SpeedSampleAvg; @@ -71,13 +75,15 @@ typedef Sample<qreal> SpeedSampleAvg;
class SpeedMonitor
{
public:
SpeedMonitor();
void addSample(const SpeedSample &sample);
SpeedSampleAvg average() const;
void reset();
private:
static const int MAX_SAMPLES = 30;
QList<SpeedSample> m_speedSamples;
boost::circular_buffer<SpeedSample> m_speedSamples;
SpeedSample m_sum;
};

Loading…
Cancel
Save