00001 #include "zeitverlauf.h"
00002
00003 #include <strstream>
00004 using std::ostrstream;
00005
00006 QTime MinSec (int mins, int secs){
00007 if (secs>=60) qDebug("ERROR: QTime MinSec secs>=60");
00008 return QTime(mins/60, mins%60, secs,0);
00009 }
00010
00011 ostream& operator<< (ostream& os, const structGesamteEinschaetzung& rhs){
00012 os << rhs.Einschaetzung <<"\t"<< rhs.EinschaetzungDavor <<"\t";
00013 os << rhs.Dauer ;
00014 return os;
00015 }
00016
00017 ZeitVerlauf::ZeitVerlauf () {
00018 Sinneinheiten.insert(QTime2Einschaetzung::value_type(QTime(0,0,0,0),null));
00019 };
00020
00021 void ZeitVerlauf::anhaengen(const QTime &Endmoment, const EinschaetzungsSkala Einschaetzung){
00022 Sinneinheiten.insert(QTime2Einschaetzung::value_type(Endmoment,Einschaetzung));
00023 }
00024
00025 QTime ZeitVerlauf::LetzterMoment(){
00026 QTime2Einschaetzung::iterator it=Sinneinheiten.end();
00027 it--;
00028 return it->first;
00029 }
00030
00031
00032 EinschaetzungsSkala ZeitVerlauf::Einschaetzung (const QTime &Endmoment){
00033 QTime2Einschaetzung::iterator it;
00034 it=Sinneinheiten.find(Endmoment);
00035 if (it==Sinneinheiten.end()) return null;
00036 else return it->second;
00037 }
00038
00039
00040 EinschaetzungsSkala ZeitVerlauf::EinschaetzungDavor (const QTime &Endmoment){
00041 QTime2Einschaetzung::iterator it;
00042 it=Sinneinheiten.find(Endmoment);
00043 if (it==Sinneinheiten.end() || it==Sinneinheiten.begin())
00044 return null;
00045 it--;
00046 return it->second;
00047 }
00048
00049
00050 int ZeitVerlauf::Dauer (const QTime &Endmoment){
00051 QTime2Einschaetzung::iterator it2, it1;
00052 it2=Sinneinheiten.find(Endmoment);
00053 if (it2==Sinneinheiten.end()) return -2;
00054 if (it2==Sinneinheiten.begin()) return -1;
00055 it1=it2; it1--;
00056 return (it1->first).secsTo(it2->first);
00057 };
00058
00059 structGesamteEinschaetzung ZeitVerlauf::GesamteEinschaetzung (const QTime &Endmoment){
00060 structGesamteEinschaetzung temp;
00061
00062 QTime2Einschaetzung::iterator it2, it1;
00063 it2=Sinneinheiten.find(Endmoment);
00064 if (it2==Sinneinheiten.end())
00065 return structGesamteEinschaetzung(null,null,-2);
00066 if (it2==Sinneinheiten.begin())
00067 return structGesamteEinschaetzung(null,null,-1);
00068 temp.Einschaetzung=it2->second;
00069 it1=it2; it1--;
00070 temp.EinschaetzungDavor=it1->second;
00071 temp.Dauer=(it1->first).secsTo(it2->first);
00072 return temp;
00073 }
00074
00075 bool ZeitVerlauf::printGesamteEinschaetzung (const QTime &Endmoment, QString &ergebnis){
00076 structGesamteEinschaetzung ges;
00077 ges=GesamteEinschaetzung (Endmoment);
00078
00079 ostrstream ss;
00080 ss << Endmoment.toString().latin1() ;
00081 if ( ges.Dauer<0 ) {
00082 ss << '\0';
00083 ergebnis=ss.str();
00084 return false;
00085 }
00086 ss <<"\t"<< ges <<'\0';
00087 ergebnis=ss.str();
00088 return true;
00089 }
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 void ZeitVerlauf::testZeitverlauf(){
00106 anhaengen (MinSec(0,13), TL);
00107 anhaengen (MinSec(0,23), TNL);
00108 anhaengen (MinSec(0,37), KNL);
00109 anhaengen (MinSec(1,10), KL);
00110 qDebug("Einschätzung (0:00) %d", Einschaetzung(MinSec(0,0)) );
00111 qDebug("Einschätzung (0:13) %d", Einschaetzung(MinSec(0,13)) );
00112 qDebug("Einschätzung (0:23) %d", Einschaetzung(MinSec(0,23)) );
00113 qDebug("Einschätzung (0:37) %d", Einschaetzung(MinSec(0,37)) );
00114 qDebug("Einschätzung (1:10) %d", Einschaetzung(MinSec(1,10)) );
00115 qDebug("Einschätzung (1:11) %d", Einschaetzung(MinSec(1,11)) );
00116
00117 qDebug("EinschätzungDavor (0:00) %d", EinschaetzungDavor(MinSec(0,0)) );
00118 qDebug("EinschätzungDavor (0:13) %d", EinschaetzungDavor(MinSec(0,13)) );
00119 qDebug("EinschätzungDavor (0:23) %d", EinschaetzungDavor(MinSec(0,23)) );
00120 qDebug("EinschätzungDavor (0:37) %d", EinschaetzungDavor(MinSec(0,37)) );
00121 qDebug("EinschätzungDavor (1:10) %d", EinschaetzungDavor(MinSec(1,10)) );
00122 qDebug("EinschätzungDavor (1:11) %d", EinschaetzungDavor(MinSec(1,11)) );
00123
00124 qDebug("Dauer (0:00) %d", Dauer(MinSec(0,0)) );
00125 qDebug("Dauer (0:13) %d", Dauer(MinSec(0,13)) );
00126 qDebug("Dauer (0:23) %d", Dauer(MinSec(0,23)) );
00127 qDebug("Dauer (0:37) %d", Dauer(MinSec(0,37)) );
00128 qDebug("Dauer (1:10) %d", Dauer(MinSec(1,10)) );
00129 qDebug("Dauer (1:11) %d", Dauer(MinSec(1,11)) );
00130
00131 qDebug("letzter Moment " + LetzterMoment().toString() );
00132
00133 QTime EndMoment;
00134 structGesamteEinschaetzung ges;
00135 ostrstream ss;
00136
00137 EndMoment=MinSec(1,10);
00138 ges=GesamteEinschaetzung(EndMoment);
00139 ss << EndMoment.toString().latin1() <<"\t"<< ges <<"\n"<<'\0';
00140 qDebug(ss.str());
00141
00142 QString testString; bool korrekt;
00143 korrekt=printGesamteEinschaetzung (MinSec(0,0), testString); qDebug(testString);
00144 korrekt=printGesamteEinschaetzung (MinSec(0,13), testString); qDebug(testString);
00145 korrekt=printGesamteEinschaetzung (MinSec(0,23), testString); qDebug(testString);
00146 korrekt=printGesamteEinschaetzung (MinSec(0,37), testString); qDebug(testString);
00147 korrekt=printGesamteEinschaetzung (MinSec(1,10), testString); qDebug(testString);
00148 korrekt=printGesamteEinschaetzung (MinSec(1,11), testString); qDebug(testString);
00149 korrekt=printGesamteEinschaetzung (MinSec(71,11), testString); qDebug(testString);
00150 };
00151
00152 void testQTimeMap(){
00153 QTime2Einschaetzung verlauf;
00154 QTime2Einschaetzung::iterator theIterator;
00155
00156 QTime Endzeitpunkt=QTime(0,1,12,0);
00157 verlauf.insert(QTime2Einschaetzung::value_type(Endzeitpunkt,TL));
00158 Endzeitpunkt=Endzeitpunkt.addSecs(7);
00159 verlauf.insert(QTime2Einschaetzung::value_type(Endzeitpunkt,KL));
00160 Endzeitpunkt=Endzeitpunkt.addSecs(-70);
00161 verlauf.insert(QTime2Einschaetzung::value_type(Endzeitpunkt,TNL));
00162 verlauf.insert(QTime2Einschaetzung::value_type(Endzeitpunkt,KNL));
00163
00164 for (theIterator = verlauf.begin(); theIterator!= verlauf.end(); ++theIterator)
00165 qDebug((*theIterator).first.toString()+" %d", (*theIterator).second);
00166
00167 QTime Endzeitpunkt2=Endzeitpunkt.addSecs(1);
00168 ;
00169 QTime2Einschaetzung::key_compare vergleiche=verlauf.key_comp();
00170 qDebug("vergleich<: %d",vergleiche(Endzeitpunkt, Endzeitpunkt2));
00171 qDebug("vergleich>=: %d",vergleiche(Endzeitpunkt2, Endzeitpunkt));
00172
00173 qDebug("Bekannter Eintrag: %d",verlauf.find(QTime(0,1,19,0))->second);
00174 qDebug("Unbekannter Eintrag(=end()): %d",verlauf.find(QTime(0,1,18,0))->second);
00175
00176 qDebug("bounds liefern gleichen, höheren key oder end()");
00177 theIterator=verlauf.lower_bound(QTime(0,1,11,0));
00178 qDebug("lower bound (1:11): "+ theIterator->first.toString());
00179 theIterator=verlauf.upper_bound(QTime(0,1,11,0));
00180 qDebug("upper bound (1:11): "+ theIterator->first.toString());
00181
00182 theIterator=verlauf.lower_bound(QTime(0,1,20,0));
00183 qDebug("lower bound (1:20): "+ theIterator->first.toString());
00184 theIterator=verlauf.upper_bound(QTime(0,1,20,0));
00185 qDebug("upper bound (1:20): "+ theIterator->first.toString());
00186
00187 qDebug("Bei Treffer: lower bound liefert gleichen, upper bound liefert höheren key (oder end())");
00188 theIterator=verlauf.lower_bound(QTime(0,1,12,0));
00189 qDebug("lower bound (1:12): "+ theIterator->first.toString());
00190 theIterator=verlauf.upper_bound(QTime(0,1,12,0));
00191 qDebug("upper bound (1:12): "+ theIterator->first.toString());
00192 theIterator=verlauf.upper_bound(QTime(0,1,19,0));
00193 qDebug("upper bound (1:19): "+ theIterator->first.toString());
00194
00195
00196
00197 };