m_lastCaptureTime = globals->get_sim_time_sec();
Sample* sample = m_buckets.back()->samples + m_validSampleCount;
- sample->simTimeMSec = static_cast<int>(m_lastCaptureTime * 1000.0);
+ sample->simTimeMSec = static_cast<size_t>(m_lastCaptureTime * 1000.0);
sample->position = globals->get_aircraft_position();
double heading, pitch, roll;
++m_validSampleCount;
}
+PagedPathForHistory_ptr FGFlightHistory::pagedPathForHistory(size_t max_entries, size_t newerThan ) const
+{
+ PagedPathForHistory_ptr result = new PagedPathForHistory();
+ if (m_buckets.empty()) {
+ return result;
+ }
+
+ BOOST_FOREACH(SampleBucket* bucket, m_buckets) {
+ unsigned int count = (bucket == m_buckets.back() ? m_validSampleCount : SAMPLE_BUCKET_WIDTH);
+
+ // iterate over all the valid samples in the bucket
+ for (unsigned int index = 0; index < count; ++index) {
+ // skip older entries
+ // TODO: bisect!
+ if( bucket->samples[index].simTimeMSec <= newerThan )
+ continue;
+
+ if( max_entries ) {
+ max_entries--;
+ SGGeod g = bucket->samples[index].position;
+ result->path.push_back(g);
+ result->last_seen = bucket->samples[index].simTimeMSec;
+ } else {
+ goto exit;
+ }
+
+ } // of samples iteration
+ } // of buckets iteration
+
+exit:
+ return result;
+}
+
+
SGGeodVec FGFlightHistory::pathForHistory(double minEdgeLengthM) const
{
SGGeodVec result;
typedef std::vector<SGGeod> SGGeodVec;
+class PagedPathForHistory : public SGReferenced {
+public:
+ PagedPathForHistory() : last_seen(0) {}
+ virtual ~PagedPathForHistory() {}
+ SGGeodVec path;
+ time_t last_seen;
+};
+typedef SGSharedPtr<PagedPathForHistory> PagedPathForHistory_ptr;
+
const unsigned int SAMPLE_BUCKET_WIDTH = 1024;
/**
virtual void reinit();
virtual void update(double dt);
+ PagedPathForHistory_ptr pagedPathForHistory(size_t max_entries, size_t newerThan = 0) const;
/**
* retrieve the path, collapsing segments shorter than
* the specified minimum length
/// heading, pitch and roll can be recorded at lower precision
/// than a double - actually 16 bits might be sufficient
float heading, pitch, roll;
- int simTimeMSec;
+ size_t simTimeMSec;
};