1 #ifndef __DIADES__AUTOMATA__HISTORY__HH__ 2 #define __DIADES__AUTOMATA__HISTORY__HH__ 17 #include <boost/archive/text_oarchive.hpp> 18 #include <boost/archive/text_iarchive.hpp> 19 #include <boost/date_time/posix_time/posix_time.hpp> 20 #include <boost/date_time/posix_time/time_serialize.hpp> 97 History():_initialTimePoint(microsec_clock::local_time()),_timePoints(),_diags(),_obs(),_hist(),_nullDiagnosis(){
98 _hist.insert(_initialTimePoint);
102 typedef vector < unordered_map<StateId,unordered_set<StateId> > >
Dict;
136 _timePoints.push_back(t);
148 return _initialTimePoint;
158 return *(_hist.rbegin());
171 TimeIterator it = _hist.begin();
172 while((it!=_hist.end()) && (t > *it))
186 TimeIterator
end(ptime t)
const 188 TimeIterator it = _hist.begin();
189 while((it!=_hist.end()) && (t >= *it))
203 const Diagnosis & getDiagnosis(ptime t)
const;
215 ObservationIterator it = _obs.begin();
216 while((it != _obs.end()) && (it->first < t))
231 ObservationIterator
obsEnd(ptime t)
const 233 ObservationIterator it = _obs.begin();
234 while((it != _obs.end()) && (it->first <= t))
253 friend class boost::serialization::access;
263 template<
class Archive>
264 void serialize(Archive & ar,
const unsigned int version)
266 ar & _initialTimePoint;
302 template<
typename DiagnosisComparisonFunctor>
304 list< pair<ptime,typename DiagnosisComparisonFunctor::ValueType> > & result)
311 bool commonTemporalWindow =
true;
316 while(commonTemporalWindow && (it1 != history1.
end(history1.
lastTimePoint()))
330 if(commonTemporalWindow)
332 if(*it1 < (*it2 - offset))
336 commonTemporalWindow = ((*it1 + offset) <= history2.
lastTimePoint());
337 if(commonTemporalWindow)
339 typename DiagnosisComparisonFunctor::ValueType res = compare(history1.
getDiagnosis(*it1), history2.
getDiagnosis(*it1 + offset));
340 result.push_back(make_pair(*it1,res));
348 if(*it1 == (*it2 - offset))
354 commonTemporalWindow = (*it2 -offset <= history1.
lastTimePoint());
356 if(commonTemporalWindow)
358 typename DiagnosisComparisonFunctor::ValueType res = compare(history1.
getDiagnosis(*it2 - offset), history2.
getDiagnosis(*it2));
359 result.push_back(make_pair(*it2-offset,res));
361 if(*it1 == (*it2 - offset))
404 template<
typename DiagnosisComparisonFunctor>
406 DiagnosisComparisonFunctor compare,
407 time_duration timeStep,
408 list< pair<ptime,int> > & result)
413 bool commonTemporalWindow =
true;
414 while(commonTemporalWindow && (initialTime <= history1.
lastTimePoint()))
416 commonTemporalWindow = (initialTime + offset) < history2.
lastTimePoint();
417 if(commonTemporalWindow)
420 result.push_back(make_pair(initialTime,res));
422 initialTime += timeStep;
ptime lastTimePoint() const
void publishDiagnosis(ptime t, const Diagnosis &d)
set< ptime >::const_iterator TimeIterator
ObservationIterator obsEnd(ptime t) const
vector< unordered_map< StateId, unordered_set< StateId > > > Dict
ptime initialTimePoint() const
ObservationIterator obsBegin(ptime t) const
TimeIterator begin(ptime t) const
map< ptime, Event >::const_iterator ObservationIterator
TimeIterator end(ptime t) const
Namespace of the Diades project.
void publishObservation(ptime t, const Event &e)
std::ostream & operator<<(std::ostream &os, const Identifier &identifier)
const Diagnosis & getDiagnosis(ptime t) const
void serialize(Archive &ar, const unsigned int version)
Candidate::StateId StateId
void historyCompareWithTimeStep(const History &history1, const History &history2, DiagnosisComparisonFunctor compare, time_duration timeStep, list< pair< ptime, int > > &result)
pair< ptime, Event > Observation
Diades::Graph::Node::NodeId StateId
vector< ptime > _timePoints
vector< Diagnosis > _diags
const Diagnosis * DiagPtr
void historyCompare(const History &history1, const History &history2, DiagnosisComparisonFunctor compare, list< pair< ptime, typename DiagnosisComparisonFunctor::ValueType > > &result)