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