23 static ROOT::ESTLType stl_type(
const std::string& class_name) {
26 std::vector<std::string> inside;
27 int num = TClassEdit::GetSplit(class_name.c_str(),inside,nested);
29 return (ROOT::ESTLType)TClassEdit::STLKind(inside[0]);
34 static TEmulatedCollectionProxy* GenEmulation(
const char* class_name, Bool_t silent) {
38 std::string cl = class_name;
39 if ( cl.find(
"stdext::hash_") != std::string::npos )
40 cl.replace(3,10,
"::");
41 if ( cl.find(
"__gnu_cxx::hash_") != std::string::npos )
42 cl.replace(0,16,
"std::");
43 TEmulatedCollectionProxy * result = 0;
44 switch ( stl_type(cl) ) {
48 case ROOT::kSTLmultimap:
49 result =
new TEmulatedMapProxy(class_name,silent);
52 result =
new TEmulatedCollectionProxy(class_name,silent);
54 if ( result->IsValid() ) {
62 TVirtualCollectionProxy*
63 TCollectionProxyFactory::GenEmulatedProxy(
const char* class_name, Bool_t silent)
67 return GenEmulation(class_name, silent);
71 TCollectionProxyFactory::GenEmulatedClassStreamer(
const char* class_name, Bool_t silent)
75 TCollectionClassStreamer* s =
new TCollectionClassStreamer();
76 s->AdoptStreamer(GenEmulation(class_name, silent));
81 TCollectionProxyFactory::GenEmulatedMemberStreamer(
const char* class_name, Bool_t silent)
84 TCollectionMemberStreamer* s =
new TCollectionMemberStreamer();
85 s->AdoptStreamer(GenEmulation(class_name, silent));
89 TCollectionProxyFactory::Proxy_t*
90 TCollectionProxyFactory::GenExplicitProxy( const ::ROOT::TCollectionProxyInfo &info, TClass *cl)
93 return new TGenCollectionProxy(info,cl);
96 TGenCollectionStreamer*
97 TCollectionProxyFactory::GenExplicitStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl )
100 TGenCollectionStreamer* ptr =
new TGenCollectionStreamer(info,cl);
105 TCollectionProxyFactory::GenExplicitClassStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl )
108 TCollectionClassStreamer* s =
new TCollectionClassStreamer();
109 s->AdoptStreamer(GenExplicitStreamer(info,cl));
114 TCollectionProxyFactory::GenExplicitMemberStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl)
117 TCollectionMemberStreamer* s =
new TCollectionMemberStreamer();
118 s->AdoptStreamer(GenExplicitStreamer(info,cl));
122 void TCollectionStreamer::InvalidProxyError() {
124 Fatal(
"TCollectionStreamer>",
"No proxy available. Data streaming impossible.");
127 TCollectionStreamer::TCollectionStreamer() : fStreamer(0)
132 TCollectionStreamer::TCollectionStreamer(
const TCollectionStreamer& c) : fStreamer(0)
136 fStreamer =
dynamic_cast<TGenCollectionProxy*
>(c.fStreamer->Generate());
137 R__ASSERT(fStreamer != 0);
143 TCollectionStreamer::~TCollectionStreamer()
151 void TCollectionStreamer::AdoptStreamer(TGenCollectionProxy* streamer)
157 fStreamer = streamer;
160 void TCollectionStreamer::Streamer(TBuffer &buff,
void *pObj,
int , TClass* onFileClass )
164 TVirtualCollectionProxy::TPushPop env(fStreamer, pObj);
165 fStreamer->SetOnFileClass( onFileClass );
166 fStreamer->Streamer(buff);