X-Git-Url: https://www.flypig.org.uk/git/?p=harbour-pedalo.git;a=blobdiff_plain;f=src%2Fstatshourjourneys.cpp;fp=src%2Fstatshourjourneys.cpp;h=f8616cb3127e75bf448d89537f5538b04be2c369;hp=0000000000000000000000000000000000000000;hb=e6c4099f5bb1565a770e55d1dd671d846dcbd68b;hpb=dc14479d561196e19417c4ecf78e847ec4b43b7c diff --git a/src/statshourjourneys.cpp b/src/statshourjourneys.cpp new file mode 100644 index 0000000..f8616cb --- /dev/null +++ b/src/statshourjourneys.cpp @@ -0,0 +1,60 @@ +#include + +#include "statshourjourneys.h" + +#define LOWESTHOUR (7) +#define HIGHESTHOUR (21) + +StatsHourJourneys::StatsHourJourneys(JourneyModel * journeys) : + journeys(journeys) +{ + title = "Journey proportions per hour (%)"; + units = "%"; + + labels.clear(); + for (int hour = LOWESTHOUR; hour <= HIGHESTHOUR; hour++) { + labels << QString::number(hour); + } +} + +void StatsHourJourneys::update() { + unsigned int minsperhour[24]; + quint64 totalmins; + int pos; + + qDebug() << "Calculating values"; + values.clear(); + + for (pos = 0; pos < 24; pos++) { + minsperhour[pos] = 0u; + } + + totalmins = 0u; + foreach (Journey const &journey, journeys->getData()) { + QTime time = journey.getStartTime(); + int hour = time.hour(); + int startmin = time.minute(); + int remaining = (journey.getDuration() / 60); + totalmins += remaining; + + while (remaining > 0) { + // toadd is always greater than 0, so the loop is guaranteed to exit + unsigned int toadd = (startmin + remaining) < 60 ? remaining : 60 - startmin; + minsperhour[hour] += toadd; + remaining -= toadd; + startmin = 0; + + hour = (hour + 1) % 24; + } + } + + for (pos = LOWESTHOUR; pos <= HIGHESTHOUR; pos++) { + float result = 0.0f; + if (totalmins > 0) { + result = ((double)minsperhour[pos] / (double)totalmins); + } + values << result; + } + + qDebug() << "Calculated values"; +}