2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
5/** @file NavigableCnv_p1.icc
6 * @brief This file contains the implementation for the NavigableCnv_p1 template methods.
7 * @author Marcin.Nowak@cern.ch
12#include "Navigation/Navigable.h"
13#include "AthenaKernel/getThinningCache.h"
21template <typename NAV, typename RPAR>
23NavigableCnv_p1<NAV, RPAR>::transToPers(const Navigable_t& trans,
24 PersNavigable_t& pers,
25 const SG::ThinningCache* cache,
28 pers.m_parameters.clear();
30 // collect all element links into a temporary vector
31 ElementLinkVect_t elv;
32 elv.reserve(trans.size());
33 /// FIXME: should we also reserve some space for pers->m_parameters ?!?
34 //pers.m_parameters.reserve( pers.m_parameters.size() + link_coll.size() );
36 typename NAV::object_iter iter = trans.begin();
37 typename NAV::object_iter end = trans.end();
39 while( iter != end ) {
41 msg << MSG::DEBUG << "NavigableCnv_p1::transToPers(): Weight["
42 << pers.m_parameters.size()-1 <<"]="
43 << pers.m_parameters[pers.m_parameters.size()-1] << endmsg;
45 elv.push_back( iter.getElement() );
46 pers.m_parameters.push_back( iter.getParameter() );
49 // this is not needed (and might actually crash if thinning occurred!)
50 // as this is done by the ELVCnv::transToPers
53 // convert the link vector to persistent
54 m_linkCnv.transToPers(elv, pers.m_links, cache, msg);
58template <typename NAV, typename RPAR>
60NavigableCnv_p1<NAV, RPAR>::transToPers(const Navigable_t& trans,
61 PersNavigable_t& pers,
64 transToPers (trans, pers,
65 SG::getThinningCache(),
70template <typename NAV, typename RPAR >
71void NavigableCnv_p1<NAV, RPAR >::persToTrans(const PersNavigable_t& pers,
75 // create a temporary link vector from persistent
76 ElementLinkVect_t elv;
77 m_linkCnv.persToTrans(pers.m_links, elv, msg);
80 // copy from link vector into navigable
81 size_t size = elv.size();
83 for( size_t i = 0; i < size; ++i ) {
84 trans.insertElement (elv[i], pers.m_parameters[i], size);
86 msg << MSG::DEBUG << "NavigableCnv_p1::PersToTrans(): Weight[" <<i <<"]="
87 << pers.m_parameters[i] << endmsg;
93template <typename NAV, typename RPAR>
96NavigableCnv_p1<NAV, RPAR>
97::transToPers(const Navigable_t* trans, PersNavigable_t* pers, MsgStream& msg) const
99 this->transToPers(*trans, *pers, msg);
103template <typename NAV, typename RPAR >
106NavigableCnv_p1<NAV, RPAR >
107::persToTrans(const PersNavigable_t* pers, Navigable_t* trans, MsgStream& msg) const
109 this->persToTrans(*pers, *trans, msg);
113//-----------------------------------------------------
114// Specialized version of the converter for Navigables without weight parameters
117template <typename NAV >
119NavigableCnv_p1<NAV, NavigationDefaults::DefaultWeight >
120::transToPers(const Navigable_t& trans,
121 PersNavigable_t& pers,
122 const SG::ThinningCache* cache,
123 MsgStream& msg) const
125 // collect all element links into a temporary vector
126 ElementLinkVect_t elv;
127 elv.reserve(trans.size());
128 /// FIXME: should we also reserve some space for pers->m_parameters ?!?
129 //pers.m_parameters.reserve( pers.m_parameters.size() + link_coll.size() );
131 typename NAV::object_iter iter = trans.begin();
132 typename NAV::object_iter end = trans.end();
134 while( iter != end ) {
135 elv.push_back( iter.getElement() );
138 // this is not needed (and might actually crash if thinning occurred!)
139 // as this is done by the ELVCnv::transToPers
140 //elv.toPersistent();
142 // convert the link vector to persistent
143 m_linkCnv.transToPers(elv, pers.m_links, cache, msg);
147template <typename NAV >
149NavigableCnv_p1<NAV, NavigationDefaults::DefaultWeight >
150::transToPers(const Navigable_t& trans,
151 PersNavigable_t& pers,
152 MsgStream& msg) const
154 transToPers (trans, pers,
155 SG::getThinningCache(),
160template <typename NAV >
163NavigableCnv_p1<NAV, NavigationDefaults::DefaultWeight >
164::transToPers(const Navigable_t* trans, PersNavigable_t* pers, MsgStream& msg) const
166 this->transToPers(*trans, *pers, msg);
170//-------------------- persToTrans() ----------------------------------
172template <typename NAV >
174NavigableCnv_p1<NAV, NavigationDefaults::DefaultWeight >
175::persToTrans(const PersNavigable_t& pers,
177 MsgStream& msg) const
179 // create a temporary link vector from persistent
180 ElementLinkVect_t elv;
181 m_linkCnv.persToTrans(pers.m_links, elv, msg);
184 // copy from link vector into navigable
185 size_t size = elv.size();
187 for( size_t i = 0; i < size; ++i ) {
188 trans.insertElement (elv[i], NavigationDefaults::DefaultWeight(), size);
193template <typename NAV >
196NavigableCnv_p1<NAV, NavigationDefaults::DefaultWeight >
197::persToTrans(const PersNavigable_t* pers, Navigable_t* trans, MsgStream& msg) const
199 this->persToTrans(*pers, *trans, msg);