11 #ifndef ROOT_TCollectionProxyFactory
12 #define ROOT_TCollectionProxyFactory
33 class TGenCollectionProxy;
34 class TGenCollectionStreamer;
35 class TVirtualCollectionProxy;
36 class TEmulatedCollectionProxy;
43 #define TYPENAME typename
46 #define TYPENAME typename
67 class TCollectionProxyFactory {
70 typedef TVirtualCollectionProxy Proxy_t;
72 typedef const std::type_info& Info_t;
74 typedef const std::type_info& Info_t;
78 static TVirtualCollectionProxy* GenEmulatedProxy(
const char* class_name, Bool_t silent);
81 static TClassStreamer* GenEmulatedClassStreamer(
const char* class_name, Bool_t silent);
84 static TMemberStreamer* GenEmulatedMemberStreamer(
const char* class_name, Bool_t silent);
88 static Proxy_t* GenExplicitProxy( const ::ROOT::TCollectionProxyInfo &info, TClass *cl );
91 template <
class T>
static Proxy_t* GenProxy(
const T &arg, TClass *cl) {
92 return GenExplicitProxy( ::ROOT::TCollectionProxyInfo::Get(arg), cl );
96 static TGenCollectionStreamer*
97 GenExplicitStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl );
100 static TClassStreamer*
101 GenExplicitClassStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl );
104 template <
class T>
static TClassStreamer* GenClassStreamer(
const T &arg, TClass *cl) {
105 return GenExplicitClassStreamer(::ROOT::TCollectionProxyInfo::Get(arg), cl);
109 static TMemberStreamer*
110 GenExplicitMemberStreamer(const ::ROOT::TCollectionProxyInfo &info, TClass *cl);
113 template <
class T>
static TMemberStreamer* GenMemberStreamer(
const T &arg, TClass *cl) {
114 return GenExplicitMemberStreamer(::ROOT::TCollectionProxyInfo::Get(arg), cl);
127 class TCollectionStreamer {
129 TCollectionStreamer& operator=(
const TCollectionStreamer&);
132 TGenCollectionProxy* fStreamer;
135 void InvalidProxyError();
139 TCollectionStreamer();
141 TCollectionStreamer(
const TCollectionStreamer& c);
143 virtual ~TCollectionStreamer();
145 void AdoptStreamer(TGenCollectionProxy* streamer);
147 void Streamer(TBuffer &refBuffer,
void *obj,
int siz, TClass *onFileClass );
159 class TCollectionClassStreamer :
public TClassStreamer,
public TCollectionStreamer {
161 TCollectionClassStreamer &operator=(
const TCollectionClassStreamer &rhs);
163 TCollectionClassStreamer(
const TCollectionClassStreamer& c)
164 : TClassStreamer(c), TCollectionStreamer(c) { }
168 TCollectionClassStreamer() : TClassStreamer(0) { }
170 virtual ~TCollectionClassStreamer() { }
172 virtual void operator()(TBuffer &buff,
void *obj ) { Streamer(buff,obj,0,fOnFileClass); }
174 virtual void Stream(TBuffer &b,
void *obj,
const TClass *onfileClass)
177 TGenCollectionProxy *proxy = TCollectionStreamer::fStreamer;
178 if (onfileClass==0 || onfileClass == proxy->GetCollectionClass()) {
179 proxy->ReadBuffer(b,obj);
181 proxy->ReadBuffer(b,obj,onfileClass);
185 Streamer(b,obj,0,(TClass*)onfileClass);
190 virtual TClassStreamer *Generate()
const {
191 return new TCollectionClassStreamer(*
this);
194 TGenCollectionProxy *GetXYZ() {
return TCollectionStreamer::fStreamer; }
207 class TCollectionMemberStreamer :
public TMemberStreamer,
public TCollectionStreamer {
209 TCollectionMemberStreamer &operator=(
const TCollectionMemberStreamer &rhs);
212 TCollectionMemberStreamer() : TMemberStreamer(0) { }
214 TCollectionMemberStreamer(
const TCollectionMemberStreamer& c)
215 : TMemberStreamer(c), TCollectionStreamer(c) { }
217 virtual ~TCollectionMemberStreamer() { }
219 virtual void operator()(TBuffer &buff,
void *obj,Int_t siz=0)
220 { Streamer(buff, obj, siz, 0); }