Bump version to 0.2.2
[harbour-pedalo.git] / src / statshourjourneys.cpp
1 #include "statshourjourneys.h"
2
3 #define LOWESTHOUR (7)
4 #define HIGHESTHOUR (21)
5
6 StatsHourJourneys::StatsHourJourneys(JourneyModel * journeys) :
7 journeys(journeys)
8 {
9 title = "Journey proportion per hour (%)";
10 units = "%";
11
12 labels.clear();
13 for (int hour = LOWESTHOUR; hour <= HIGHESTHOUR; hour++) {
14 labels << QString::number(hour);
15 }
16 }
17
18 void StatsHourJourneys::update() {
19 unsigned int minsperhour[24];
20 quint64 totalmins;
21 int pos;
22
23 barvalues.clear();
24
25 for (pos = 0; pos < 24; pos++) {
26 minsperhour[pos] = 0u;
27 }
28
29 totalmins = 0u;
30 foreach (Journey const &journey, journeys->getData()) {
31 QTime time = journey.getStartTime();
32 int hour = time.hour();
33 int startmin = time.minute();
34 int remaining = (journey.getDuration() / 60);
35 totalmins += remaining;
36
37 while (remaining > 0) {
38 // toadd is always greater than 0, so the loop is guaranteed to exit
39 unsigned int toadd = (startmin + remaining) < 60 ? remaining : 60 - startmin;
40 minsperhour[hour] += toadd;
41 remaining -= toadd;
42 startmin = 0;
43
44 hour = (hour + 1) % 24;
45 }
46 }
47
48 for (pos = LOWESTHOUR; pos <= HIGHESTHOUR; pos++) {
49 float result = 0.0f;
50 if (totalmins > 0) {
51 result = ((double)minsperhour[pos] / (double)totalmins);
52 }
53 barvalues << result;
54 }
55 }