File indexing completed on 2025-08-06 08:18:15
0001 #include "SvtxTrackMap_v2.h"
0002
0003 #include "SvtxTrack.h"
0004
0005 #include <phool/PHObject.h> // for PHObject
0006
0007 #include <iterator> // for reverse_iterator
0008 #include <map> // for _Rb_tree_const_iterator, _Rb_tree_iterator
0009 #include <ostream> // for operator<<, endl, ostream, basic_ostream, bas...
0010 #include <utility> // for pair, make_pair
0011
0012 SvtxTrackMap_v2::SvtxTrackMap_v2()
0013 : _map()
0014 {
0015 }
0016
0017 SvtxTrackMap_v2::SvtxTrackMap_v2(const SvtxTrackMap_v2& trackmap)
0018 : _map()
0019 {
0020 for (auto iter : trackmap)
0021 {
0022 auto track = static_cast<SvtxTrack*>(iter.second->CloneMe());
0023 _map.insert(std::make_pair(track->get_id(), track));
0024 }
0025 }
0026
0027 SvtxTrackMap_v2& SvtxTrackMap_v2::operator=(const SvtxTrackMap_v2& trackmap)
0028 {
0029
0030 if (&trackmap == this)
0031 {
0032 return *this;
0033 }
0034
0035 Reset();
0036 for (auto iter : trackmap)
0037 {
0038 auto track = static_cast<SvtxTrack*>(iter.second->CloneMe());
0039 _map.insert(std::make_pair(track->get_id(), track));
0040 }
0041 return *this;
0042 }
0043
0044 SvtxTrackMap_v2::~SvtxTrackMap_v2()
0045 {
0046 Reset();
0047 }
0048
0049 void SvtxTrackMap_v2::Reset()
0050 {
0051 for (auto& iter : _map)
0052 {
0053 SvtxTrack* track = iter.second;
0054 delete track;
0055 }
0056 _map.clear();
0057 }
0058
0059 void SvtxTrackMap_v2::identify(std::ostream& os) const
0060 {
0061 os << "SvtxTrackMap_v2: size = " << _map.size() << std::endl;
0062 return;
0063 }
0064
0065 const SvtxTrack* SvtxTrackMap_v2::get(unsigned int id) const
0066 {
0067 ConstIter iter = _map.find(id);
0068 if (iter == _map.end())
0069 {
0070 return nullptr;
0071 }
0072 return iter->second;
0073 }
0074
0075 SvtxTrack* SvtxTrackMap_v2::get(unsigned int id)
0076 {
0077 Iter iter = _map.find(id);
0078 if (iter == _map.end())
0079 {
0080 return nullptr;
0081 }
0082 return iter->second;
0083 }
0084
0085 SvtxTrack* SvtxTrackMap_v2::insert(const SvtxTrack* track)
0086 {
0087 unsigned int index = 0;
0088 if (!_map.empty())
0089 {
0090 index = _map.rbegin()->first + 1;
0091 }
0092 auto copy = static_cast<SvtxTrack*>(track->CloneMe());
0093 copy->set_id(index);
0094
0095 const auto result = _map.insert(std::make_pair(index, copy));
0096 if (!result.second)
0097 {
0098 std::cout << "SvtxTrackMap_v2::insert - duplicated key. track not inserted" << std::endl;
0099 delete copy;
0100 return nullptr;
0101 }
0102 else
0103 {
0104 return copy;
0105 }
0106 }
0107
0108 SvtxTrack* SvtxTrackMap_v2::insertWithKey(const SvtxTrack* track, unsigned int index)
0109 {
0110 auto copy = static_cast<SvtxTrack*>(track->CloneMe());
0111 copy->set_id(index);
0112 const auto result = _map.insert(std::make_pair(index, copy));
0113 if (!result.second)
0114 {
0115 std::cout << "SvtxTrackMap_v2::insertWithKey - duplicated key. track not inserted" << std::endl;
0116 delete copy;
0117 return nullptr;
0118 }
0119 else
0120 {
0121 return copy;
0122 }
0123 }