5#ifndef T_ATHENAPOOLTPINTVECTORCNV_H
6#define T_ATHENAPOOLTPINTVECTORCNV_H
20template<
class TRANS_BASE,
class TRANS >
61 reinterpret_cast<TRANS*
> (trans),
70 transToPers (
reinterpret_cast<const TRANS*
> (trans),
71 reinterpret_cast<Pers_t*
> (pers),
85 TPObjRef toPersistent_impl(
const TRANS *trans, MsgStream &log );
89 virtual const std::type_info&
transientTInfo()
const {
return typeid(TRANS); }
102 assert (index < m_pStorage->size());
104 persToTrans( &pers,
dynamic_cast<TRANS*
>(trans), log );
120 throw std::runtime_error(
121 std::string(
"virt_createTransFromPStore() mothod not supported in TP converter for an abstract class: ")
122 +
typeid(*this).name() );
168template<
class TRANS_BASE,
class TRANS >
188 std::unique_ptr<TRANS> trans(
new TRANS());
190 return(trans.release());
213template<
class TRANS >
227 return toPersistent_impl( trans, log );
241template<
class TRANS_BASE,
class TRANS >
276template<
class TRANS,
class CONV>
278 :
public TPCnvBase<TRANS, TPIntegerVector_p2 > {
290 size_t pers_size = persVect->
next(piter);
292 transVect->reserve( pers_size );
294 while( pers_size-- ) {
306 persVect->
reserve( 1 + transVect->size()*2 );
307 persVect->
push_back( transVect->size() );
309 for(
typename TRANS::const_iterator
310 it = transVect->begin(),
311 iEnd = transVect->end();
334template<
class TRANS,
class CONV>
342 persVect->
reserve( 1 + transVect->size()*2 );
343 persVect->
push_back( transVect->size() );
345 for(
typename TRANS::const_iterator
346 it = transVect->begin(),
347 iEnd = transVect->end();
367 virtual void persToTrans(const PERS* persVect, TRANS* transVect, MsgStream &log) {
369 transVect->reserve( persVect->size() );
370 // convert vector entries one by one
371 typename TRANS::iterator ti = transVect->begin();
372 typename PERS::const_iterator pi = persVect->begin(), iEnd = persVect->end();
373 for( ; pi != iEnd; ++pi, ++ti ) {
374 fillTransFromPStore( &m_elementCnv, *pi, &*ti, log );
379 virtual void transToPers(const TRANS* transVect, PERS* persVect, MsgStream &log) {
381 persVect->reserve( transVect->size() );
382 // convert vector entries one by one
383 for( typename TRANS::const_iterator
384 it = transVect->begin(), iEnd = transVect->end();
386 persVect->push_back( toPersistent( &m_elementCnv, &*it, log ) );
This file contains template definitions for Transient/Persistent converters.
This file contains definition of TPIntegerVectorStorage_p2, which is a storage class used in top-leve...
TPObjRef::typeID_t m_pStorageTID
CNV::Trans_t * createTransFromPStore(CNV **cnv, const TPObjRef &ref, MsgStream &log) const
virtual TopLevelTPCnvBase * topConverter()
TPObjRef toPersistent(CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
virtual const std::type_info & transientTInfo() const
return C++ type id of the transient class this converter is for
TPObjRef toPersistent_impl(const TRANS *trans, MsgStream &log)
Convert transient object to persistent representation.
virtual void persToTrans(const Pers_t *persObj, TRANS *transObj, MsgStream &log)=0
Convert persistent representation to transient one.
virtual void persToTransUntyped(const void *pers, void *trans, MsgStream &log)
Convert persistent object representation to transient.
virtual void pstoreToTrans(unsigned index, TRANS_BASE *trans, MsgStream &log)
Convert persistent representation stored in the storage vector of the top-level object to transient.
TPIntegerVectorStorage_p2 * m_pStorage
the address of the storage vector for persistent representations
TPIntegerVector_p2 Pers_t
virtual TPObjRef virt_toPersistent(const TRANS_BASE *trans, MsgStream &log)
Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in th...
virtual ~TPAbstractPolyCnvBase()
virtual void transToPersUntyped(const void *trans, void *pers, MsgStream &log)
Convert transient object representation to persistent.
void setPStorage(TPIntegerVectorStorage_p2 *storage)
Tell this converter which storage vector it should use to store or retrieve persistent representation...
virtual TRANS * virt_createTransFromPStore(unsigned, MsgStream &)
This method implements a pure virtual base class method, but should never be called,...
virtual void transToPers(const TRANS *transObj, Pers_t *persObj, MsgStream &log)=0
Convert transient representation to persistent one.
virtual void reservePStorage(size_t size)
Reserve 'size' elements for persistent storage - not much sense in this clas.
virtual void persToTrans(const PERS *persObj, TRANS *transObj, MsgStream &log)=0
Convert persistent representation to transient one.
virtual void transToPers(const TRANS *transObj, PERS *persObj, MsgStream &log)=0
Convert transient representation to persistent one.
std::vector< TPIntegerVector_p2 > * m_pStorage
TPIntegerVector_p2 Pers_t
virtual void pstoreToTrans(unsigned index, TRANS *trans, MsgStream &log)
Convert persistent representation stored in the storage vector of the top-level object to transient.
virtual TPObjRef virt_toPersistent(const TRANS *trans, MsgStream &log)
Internal interface method that is used to invoke the real conversion method (toPersistent_impl) in th...
Storage implementation for TP converters producing TP representation as series of ints.
const value_type & next(const_iterator &iter) const
TPObjRef next_TPObjRef(const_iterator &iter) const
void push_back(const value_type &val)
void push_TPObjRef(const TPObjRef &val)
void reserve(size_t new_size)
const value_type * const_iterator
This class is an object reference used in Athena persistent data model.
virtual TRANS * virt_createTransFromPStore(unsigned index, MsgStream &log)
Internal interface method that is used to invoke the real conversion method (createTransient)
virtual TRANS * createTransient(const Pers_t *persObj, MsgStream &log)
Create transient representation of a persistent object.
TPIntegerVector_p2 Pers_t
virtual TRANS * createTransient(const PERS *persObj, MsgStream &log)
Create transient representation of a persistent object.
virtual void transToPers(const TRANS *transVect, TPIntegerVector_p2 *persVect, MsgStream &log)
Converts vector of TRANS::value_type objects to vector of PERS::value_type objects,...
Converter between: transient vector of T* (like DataVector<T>) and persistent vector<T> Uses converte...
CONV * m_elementCnv
pointer to the TP converter used for vector elements
virtual void transToPers(const TRANS *transVect, TPIntegerVector_p2 *persVect, MsgStream &log)
Converts vector of TRANS::value_type objects to vector of Pers_t::value_type objects,...
virtual void persToTrans(const TPIntegerVector_p2 *persVect, TRANS *transVect, MsgStream &log)
Converts vector of Pers_t::value_type objects to vector of TRANS::value_type objects,...