4 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
15 const typename JetMapBase<P>::data_t JetMapBase<P>::m_nullData = data_t();
19 JetMapBase<P>::JetMapBase()
20 : m_ownPolicy (SG::OWN_ELEMENTS)
27 JetMapBase<P>::JetMapBase(const JetMapBase& /*base*/)
28 // : m_lastIndex(base.m_lastIndex)
31 // not yet clear what we have to do here.
34 // std::copy(base.m_store.begin(),base.m_store.end(),
35 // std::back_insert_iterator<map_t>(m_store));
41 JetMapBase<P>::~JetMapBase()
42 { JetMapBase::clear() ;}
46 bool JetMapBase<P>::addRecord(size_t jetIndex) const
48 auto r = m_store.try_emplace (jetIndex);
53 const typename JetMapBase<P>::record_t* JetMapBase<P>::getRecord(size_t jetIndex) const
55 typename map_t::iterator jetpos = m_store.find(jetIndex);
56 // if record does not exist, create it
57 if ( jetpos == m_store.end() ) return NULL;
58 return (*jetpos).second.get();
63 JetMapBase<P>::assignRecord(size_t jetIndex, record_t* rec) const
65 record_ptr_t & rec_p = m_store[jetIndex];
66 if( rec_p.isValid() ) rec_p.destroy();
72 JetMapBase<P>::removeRecord(size_t jetIndex) const
74 typename map_t::iterator jetpos = m_store.find(jetIndex);
75 if ( jetpos == m_store.end() ) return;
76 (*jetpos).second.destroy();
77 m_store.erase( jetpos ) ;
83 JetMapBase<P>::transferRecord(const JetMapBase<P>* fromMap, size_t oldIndex, size_t newIndex ) const {
84 typename map_t::iterator jetpos = fromMap->m_store.find(oldIndex);
85 if ( jetpos == fromMap->m_store.end() ) return;
86 if((*jetpos).second.isValid()) m_store[newIndex] = (*jetpos).second;
87 if( m_ownPolicy == SG::OWN_ELEMENTS ) fromMap->m_store.erase(jetpos);
92 JetMapBase<P>::addData(size_t jetIndex,size_t keyIndex,const data_t& data)
96 record_ptr_t & rec_ptr = m_store[jetIndex];
97 if( ! rec_ptr.isValid() ) rec_ptr.set( new record_t() ) ;
98 record_t & record = *rec_ptr;
99 if ( keyIndex >= record.size() )
100 record.resize(keyIndex+1,data_t());
101 record[keyIndex] = data;
107 JetMapBase<P>::retrieveData(size_t jetIndex,size_t keyIndex,data_t& data) const
109 // check jet and moment index validity
110 typename map_t::iterator jetpos = m_store.find(jetIndex);
111 if ( jetpos == m_store.end() ) return false;
112 record_ptr_t & record = (*jetpos).second;
113 if( ! record.isValid() ) return false;// this should never happen
114 if ( keyIndex >= record->size() ) return false;
116 data= record->operator[](keyIndex) ;
121 const typename JetMapBase<P>::data_t&
122 JetMapBase<P>::accessData(size_t jetIndex,size_t keyIndex) const
124 // check jet and moment index validity
125 typename map_t::iterator jetpos = m_store.find(jetIndex);
126 if ( jetpos == m_store.end() ) return m_nullData;
127 record_ptr_t & record = (*jetpos).second;
128 if( ! record.isValid() ) return m_nullData; // this should never happen
129 if ( keyIndex >= record->size() ) return m_nullData;
131 return record->operator[](keyIndex) ;
135 size_t JetMapBase<P>::numberOfMoments(size_t jetIndex) const
137 typename map_t::iterator jetpos = m_store.find(jetIndex);
138 if ( jetpos == m_store.end() ) return 0;
139 if((*jetpos).second.isValid()) return (*jetpos).second->size() ;
144 inline typename JetMapBase<P>::map_t& JetMapBase<P>::map() { return m_store; }
147 inline const typename JetMapBase<P>::map_t& JetMapBase<P>::map() const
151 void JetMapBase<P>::clear(){
152 if( m_ownPolicy == SG::OWN_ELEMENTS ) {
153 for (auto& p : m_store) {