diff --git a/include/core/processor/track_matrix.h b/include/core/processor/track_matrix.h index 8a976ea84b2ba575f69b57746a3b0380cb78c342..ca7e71d1a7de39fbb496a3f9eb00ab276815ed28 100644 --- a/include/core/processor/track_matrix.h +++ b/include/core/processor/track_matrix.h @@ -78,8 +78,9 @@ class TrackMatrix TrackMatrix(); virtual ~TrackMatrix(); - void newTrack (CaptureBasePtr _cap, FeatureBasePtr _ftr); - void add (size_t _track_id, CaptureBasePtr _cap, FeatureBasePtr _ftr); + void newTrack (FeatureBasePtr _ftr); + void add (const SizeStd& _track_id, const FeatureBasePtr& _ftr); + void add (const FeatureBasePtr& _ftr_existing, const FeatureBasePtr& _ftr_new); void remove (FeatureBasePtr _ftr); void remove (const SizeStd& _track_id); void remove (CaptureBasePtr _cap); diff --git a/src/processor/track_matrix.cpp b/src/processor/track_matrix.cpp index e9fdc9bf38f8f0f3548ee27c463927018a4ee8fa..9b5a4fa25ad4e09ebf693e2fffb2298d68388684 100644 --- a/src/processor/track_matrix.cpp +++ b/src/processor/track_matrix.cpp @@ -38,21 +38,24 @@ Snapshot TrackMatrix::snapshot(CaptureBasePtr _capture) return Snapshot(); } -void TrackMatrix::newTrack(CaptureBasePtr _cap, FeatureBasePtr _ftr) +void TrackMatrix::newTrack(FeatureBasePtr _ftr) { track_id_count_ ++; - add(track_id_count_, _cap, _ftr); + add(track_id_count_, _ftr); } -void TrackMatrix::add(size_t _track_id, CaptureBasePtr _cap, FeatureBasePtr _ftr) +void TrackMatrix::add(const SizeStd& _track_id, const FeatureBasePtr& _ftr) { - assert( (_track_id > 0) && (_track_id <= track_id_count_) && "Provided track ID does not exist. Use newTrack() instead."); + assert( tracks_.count(_track_id) != 0 && "Provided track ID does not exist. Use newTrack() instead."); + assert( _ftr->getCapture() != nullptr && "adding a feature not linked to any capture"); - _ftr->setTrackId(_track_id); - if (_cap != _ftr->getCapture()) - _ftr->setCapture(_cap); - tracks_[_track_id].emplace(_cap->getTimeStamp(), _ftr); - snapshots_[_cap->id()].emplace(_track_id, _ftr); // will create new snapshot if _cap_id is not present + tracks_[_track_id].emplace(_ftr->getCapture()->getTimeStamp(), _ftr); + snapshots_[_ftr->getCapture()->id()].emplace(_track_id, _ftr); // will create new snapshot if _cap_id is not present +} + +void TrackMatrix::add(const FeatureBasePtr& _ftr_existing,const FeatureBasePtr& _ftr_new) +{ + add(_ftr_existing->trackId(), _ftr_new); } void TrackMatrix::remove(const SizeStd& _track_id)