From 9c77e67260f01a4a7eebd52e4e31836e1a906301 Mon Sep 17 00:00:00 2001 From: jvallve <jvallve@iri.upc.edu> Date: Mon, 2 May 2022 16:29:05 +0200 Subject: [PATCH] removed duplicated maps for const in track_matrix --- include/core/processor/track_matrix.h | 4 -- src/processor/track_matrix.cpp | 63 ++++++++++++++------------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/include/core/processor/track_matrix.h b/include/core/processor/track_matrix.h index 215f02060..f6974afba 100644 --- a/include/core/processor/track_matrix.h +++ b/include/core/processor/track_matrix.h @@ -142,13 +142,9 @@ class TrackMatrix // tracks across all Captures map<SizeStd, Track > tracks_; // map indexed by track_Id of ( maps indexed by TimeStamp of ( features ) ) - map<SizeStd, TrackConst > tracks_const_; // map indexed by track_Id of ( maps indexed by TimeStamp of ( features ) ) -// // tracks across captures that belong to keyframe -// map<size_t, Track > tracks_kf_; // map indexed by track_Id of ( maps indexed by TimeStamp of ( features ) ) // Across track: maps of Feature pointers indexed by track_Id. map<CaptureBasePtr, Snapshot > snapshots_; // map indexed by capture_ptr of ( maps indexed by track_Id of ( features ) ) - map<CaptureBaseConstPtr, SnapshotConst > snapshots_const_; // map indexed by capture_ptr of ( maps indexed by track_Id of ( features ) ) }; } /* namespace wolf */ diff --git a/src/processor/track_matrix.cpp b/src/processor/track_matrix.cpp index 6f6e02c3b..ff2fceb34 100644 --- a/src/processor/track_matrix.cpp +++ b/src/processor/track_matrix.cpp @@ -45,10 +45,12 @@ TrackMatrix::~TrackMatrix() TrackConst TrackMatrix::track(const SizeStd& _track_id) const { - if (tracks_const_.count(_track_id) > 0) - return tracks_const_.at(_track_id); - else - return TrackConst(); + TrackConst track_const; + if (tracks_.count(_track_id) > 0) + for (auto&& pair : tracks_.at(_track_id)) + track_const[pair.first]=pair.second; + + return track_const; } Track TrackMatrix::track(const SizeStd& _track_id) @@ -61,10 +63,22 @@ Track TrackMatrix::track(const SizeStd& _track_id) SnapshotConst TrackMatrix::snapshot(CaptureBaseConstPtr _capture) const { - if (_capture && snapshots_const_.count(_capture) > 0) - return snapshots_const_.at(_capture); - else + const auto& it = std::find_if(snapshots_.begin(), + snapshots_.end(), + [_capture](const std::pair<CaptureBasePtr, Snapshot>& pair) + { + return pair.first == _capture; + } + ); + + if (it == snapshots_.end()) return SnapshotConst(); + + SnapshotConst snapshot_const; + for (auto&& pair : it->second) + snapshot_const[pair.first]=pair.second; + + return snapshot_const; } Snapshot TrackMatrix::snapshot(CaptureBasePtr _capture) @@ -88,9 +102,7 @@ void TrackMatrix::add(const SizeStd& _track_id, const FeatureBasePtr& _ftr) _ftr->setTrackId(_track_id); tracks_[_track_id].emplace(_ftr->getCapture()->getTimeStamp(), _ftr); - tracks_const_[_track_id].emplace(_ftr->getCapture()->getTimeStamp(), _ftr); snapshots_[_ftr->getCapture()].emplace(_track_id, _ftr); // will create new snapshot if _cap_id is not present - snapshots_const_[_ftr->getCapture()].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) @@ -107,16 +119,12 @@ void TrackMatrix::remove(const SizeStd& _track_id) { CaptureBasePtr cap = pair_time_ftr.second->getCapture(); snapshots_.at(cap).erase(_track_id); - snapshots_const_.at(cap).erase(_track_id); if (snapshots_.at(cap).empty()) snapshots_.erase(cap); - if (snapshots_const_.at(cap).empty()) - snapshots_const_.erase(cap); } // Remove track tracks_.erase(_track_id); - tracks_const_.erase(_track_id); } } @@ -130,16 +138,12 @@ void TrackMatrix::remove(CaptureBasePtr _cap) { SizeStd trk_id = pair_trkid_ftr.first; tracks_.at(trk_id).erase(ts); - tracks_const_.at(trk_id).erase(ts); if (tracks_.at(trk_id).empty()) tracks_.erase(trk_id); - if (tracks_const_.at(trk_id).empty()) - tracks_const_.erase(trk_id); } // remove snapshot snapshots_.erase(_cap); - snapshots_const_.erase(_cap); } } @@ -153,20 +157,14 @@ void TrackMatrix::remove(FeatureBasePtr _ftr) if(tracks_.count(_ftr->trackId()) && tracks_.at(_ftr->trackId()).count(cap->getTimeStamp())) { tracks_ .at(_ftr->trackId()).erase(cap->getTimeStamp()); - tracks_const_.at(_ftr->trackId()).erase(cap->getTimeStamp()); if (tracks_.at(_ftr->trackId()).empty()) tracks_.erase(_ftr->trackId()); - if (tracks_const_.at(_ftr->trackId()).empty()) - tracks_const_.erase(_ftr->trackId()); } if(snapshots_.count(cap) && snapshots_.at(cap).count(_ftr->trackId())) { snapshots_ .at(cap).erase(_ftr->trackId()); - snapshots_const_.at(cap).erase(_ftr->trackId()); if (snapshots_.at(cap).empty()) snapshots_.erase(cap); - if (snapshots_const_.at(cap).empty()) - snapshots_const_.erase(cap); } } } @@ -184,8 +182,8 @@ size_t TrackMatrix::trackSize(const SizeStd& _track_id) const FeatureBaseConstPtr TrackMatrix::firstFeature(const SizeStd& _track_id) const { - if (tracks_const_.count(_track_id) > 0) - return tracks_const_.at(_track_id).begin()->second; + if (tracks_.count(_track_id) > 0) + return tracks_.at(_track_id).begin()->second; else return nullptr; } @@ -200,8 +198,8 @@ FeatureBasePtr TrackMatrix::firstFeature(const SizeStd& _track_id) FeatureBaseConstPtr TrackMatrix::lastFeature(const SizeStd& _track_id) const { - if (tracks_const_.count(_track_id) > 0) - return tracks_const_.at(_track_id).rbegin()->second; + if (tracks_.count(_track_id) > 0) + return tracks_.at(_track_id).rbegin()->second; else return nullptr; } @@ -220,7 +218,7 @@ vector<FeatureBaseConstPtr> TrackMatrix::trackAsVector(const SizeStd& _track_id) if (tracks_.count(_track_id)) { vec.reserve(trackSize(_track_id)); - for (auto const& pair_time_ftr : tracks_const_.at(_track_id)) + for (auto const& pair_time_ftr : tracks_.at(_track_id)) vec.push_back(pair_time_ftr.second); } return vec; @@ -240,10 +238,13 @@ vector<FeatureBasePtr> TrackMatrix::trackAsVector(const SizeStd& _track_id) FeatureBaseConstPtrList TrackMatrix::snapshotAsList(CaptureBaseConstPtr _cap) const { + SnapshotConst snapshot_const = snapshot(_cap); + FeatureBaseConstPtrList lst; - if (snapshots_const_.count(_cap)) - for (auto const& pair_trkid_ftr : snapshots_const_.at(_cap)) - lst.push_back(pair_trkid_ftr.second); + + for (auto const& pair_trkid_ftr : snapshot_const) + lst.push_back(pair_trkid_ftr.second); + return lst; } -- GitLab