00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #ifndef __SPEEDCALCULATOR_H__
00024 #define __SPEEDCALCULATOR_H__
00025 
00026 #include <QVector>
00027 #include <QTime>
00028 
00029 class SpeedCalculator
00030 {
00031         public:
00032                 SpeedCalculator();
00033 
00040                 long double                                     estimatedTimeUntilArrival() const;
00041 
00042                 qint64                                          expectedDataSize() const { return dataSizeExpected; }
00043 
00050                 long double                                     getSpeed() const;
00051 
00059                 qint64                      lastRegisteredDataAmount() const;
00060 
00067                 qint64                      lastRegisterAttemptedDataAmount() const
00068                 {
00069                         return lastRegisterAttemptDataSize;
00070                 }
00071 
00080                 void                                            registerDataAmount(qint64 totalAmountOfArrivedData);
00081 
00087                 void                                            setExpectedDataSize(qint64 size);
00088 
00096                 void                                            start();
00097 
00098         private:
00099                 class DataArrivalInfo
00100                 {
00101                         public:
00105                                 qint64                          totalAmountOfArrivedData;
00106 
00110                                 qint64                          timeOfArrival;
00111 
00112                                 DataArrivalInfo()
00113                                 {
00114                                         this->totalAmountOfArrivedData = 0;
00115                                         this->timeOfArrival = 0;
00116                                 }
00117 
00118                                 DataArrivalInfo(qint64 totalAmountOfArrivedData, qint64 timeOfArrival)
00119                                 {
00120                                         this->totalAmountOfArrivedData = totalAmountOfArrivedData;
00121                                         this->timeOfArrival = timeOfArrival;
00122                                 }
00123                 };
00124 
00125                 static const int                        NUM_ARRIVAL_DATA = 2;
00126 
00127                 QVector<DataArrivalInfo>        arrivalData;
00128 
00129 
00130 
00131                 QTime                                           clock;
00132                 qint64                                          dataSizeExpected;
00133 
00138                 qint64                                          lastRegisterAttemptDataSize;
00139 };
00140 
00141 #endif