24 return getTopLevelTPCnv()->getConverterID();
31 int extendingTPLCnvID = extending_converter->
getTPCnvID();
32 if( extendingTPLCnvID == this->getTPCnvID()
33 || m_extendingConverters.find( extendingTPLCnvID ) != m_extendingConverters.end() ) {
35 error <<
"Conflicting TP converter IDs when registering extending Athena Converter. ID=" << extendingTPLCnvID;
36 throw runtime_error(
error.str() );
40 cloned_converter = extending_converter;
44 cloned_converter = extending_converter->
clone();
45 if( !cloned_converter ) {
47 error <<
"Extending TP converter neeeds to define clone() method. Converter: " << extending_converter->
name();
48 throw runtime_error(
error.str() );
51 m_clonedExtendingCnvs.push_back( cloned_converter );
54 m_extendingConverters[ extendingTPLCnvID ] = cloned_converter;
67 m_TLCnvForReading = &baseTLPcnv;
69 if( getTopLevelTPCnv() != m_TLCnvForReading ) {
71 if( m_extendingConverters.size()
72 && m_extCnvMapMap.find( m_TLCnvForReading ) == m_extCnvMapMap.end() ) {
75 m_extCnvMapMap[ m_TLCnvForReading ] = newCnvMap;
78 for( extCnvMap_t::const_iterator cnvI = m_extendingConverters.begin();
79 cnvI != m_extendingConverters.end(); ++cnvI ) {
81 if( !cloned_converter ) {
84 error <<
" TPCNVINFO: ERROR! This extending TP converter does not define clone() method. "
85 <<
" Converter: " << cnvI->second->name();
86 cerr <<
error.str() << endl;
87 throw runtime_error(
error.str() );
89 m_clonedExtendingCnvs.push_back( cloned_converter );
91 (*newCnvMap)[ cloned_converter->
getTPCnvID() ] = cloned_converter;
102 if( m_TLCnvForReading ) {
107 if( getTopLevelTPCnv() == m_TLCnvForReading ) {
109 extendingConverters = &m_extendingConverters;
111 extCnvMapMap_t::const_iterator extCnvMapIter = m_extCnvMapMap.find(m_TLCnvForReading);
112 if( extCnvMapIter == m_extCnvMapMap.end() ) {
113 throw std::runtime_error(
"Extending TP converter not available");
115 extendingConverters = extCnvMapIter->second;
118 for( TPCnvTokenList_p1::const_iterator
it =
tokens->begin();
it !=
tokens->end(); ++
it ) {
119 if(
it->token().size() < 36 ) {
121 err <<
"Corrupted Token in the list of extensions. Token='" <<
it->token() <<
"'"
122 <<
" CnvID=" <<
it->converterID() <<
", Token list size=" <<
tokens->size();
123 throw std::runtime_error(
err.str());
125 extCnvMap_t::const_iterator cnv = extendingConverters->find(
it->converterID() );
126 if( cnv == extendingConverters->end() ) {
128 err <<
"Extending TP converter not loaded! "
129 <<
"missing ExtCnvID=" <<
it->converterID()
130 <<
" corresponding POOL token: " <<
it->token();
131 throw std::runtime_error(
err.str());
137 cnv->second->readObject(
it->token() );
150 for( extCnvMap_t::const_iterator cnv = m_extendingConverters.begin();
151 cnv != m_extendingConverters.end(); ++cnv ) {
152 cnv->second->deletePersistentObjects();
154 for(
size_t c = 0;
c < m_clonedExtendingCnvs.size();
c++ )
155 m_clonedExtendingCnvs[
c]->deletePersistentObjects();
157 getTopLevelTPCnv()->deleteTLPersObject();
167 for(
size_t c = 0;
c < m_clonedExtendingCnvs.size();
c++ )
168 delete m_clonedExtendingCnvs[
c];
169 for( extCnvMapMap_t::const_iterator mmiter = m_extCnvMapMap.begin();
170 mmiter != m_extCnvMapMap.end(); ++mmiter ) {
171 delete mmiter->second;