15#include "TMemberStreamer.h"
34template <
class T,
class ALLOC>
35void vectorMove (std::vector<T, ALLOC>& src, std::vector<T, ALLOC>& dst)
39template <
class T,
class U,
class ALLOC>
40void vectorMove (std::vector<T, ALLOC>& src, std::vector<U, ALLOC>& dst)
42 dst.assign (src.begin(), src.end());
49template <
class T,
class U=T,
class ALLOC=std::allocator<T> >
51 :
public TMemberStreamer
61 const char* allocName =
nullptr);
70 virtual void operator() (TBuffer& b,
void* pmember, Int_t size=0);
85template <
class T,
class U,
class ALLOC>
87 const char* allocName )
89 std::string vname =
"vector<";
91 if (allocName !=
nullptr) {
95 if (vname[vname.size()-1] ==
'>')
98 m_cl = gROOT->GetClass (vname.c_str());
108template <
class T,
class U,
class ALLOC>
114 assert (b.IsReading());
121 std::vector<T, ALLOC> tmp;
126 m_cl->Streamer (&tmp, b);
138#define CONVERTER(SRC, DST) \
140 TConverterRegistry::Instance()->AddStreamerConverter \
141 ("vector<" #SRC ">", \
142 "SG::PackedContainer<" #DST ",allocator<" #DST "> >", \
143 new PackedContainerConverter<SRC, DST> ( #SRC)); \
146#define CONVERTER1(T) CONVERTER(T,T)
148#define CONVERTER2(T, ALLOC) \
150 TConverterRegistry::Instance()->AddStreamerConverter \
151 ("vector<" #T "," #ALLOC "<" #T "> >", \
152 "SG::PackedContainer<" #T "," #ALLOC "<" #T "> >", \
153 new PackedContainerConverter<T, T, ALLOC<T> > ( #T, #ALLOC "<" #T ">" )); \
176 CONVERTER1(std::vector<std::vector<unsigned char> >);
178 CONVERTER1(std::vector<std::vector<unsigned short> >);
180 CONVERTER1(std::vector<std::vector<unsigned int> >);
182 CONVERTER1(std::vector<std::vector<double> >);
Allow converting std::vector to SG::PackedContainer.
Container to hold aux data to be stored in a packed form.
Registry for Root converters.
PackedContainerConverter(const char *tname, const char *allocName=nullptr)
Constructor.
TClass * m_cl
Hold the source class.
virtual void operator()(TBuffer &b, void *pmember, Int_t size=0)
Run the streamer.
Container to hold aux data to be stored in a packed form.
void vectorMove(std::vector< T, ALLOC > &src, std::vector< T, ALLOC > &dst)
Move from one vector to another.
void installPackedContainerConverters()
Install converters for supported instantiations.