Back to home page

sPhenix code displayed by LXR

 
 

    


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   // do nothing if same  copying map onto itself
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 }