Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TMemberStreamer.h
Go to the documentation of this file.
1 // @(#)root/meta:$Id$
2 // Author: Victor Perev and Philippe Canal 08/05/02
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2003, Rene Brun, Fons Rademakers and al. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TMemberStreamer
13 #define ROOT_TMemberStreamer
14 
15 #include "Rtypes.h"
16 #include "TClassRef.h"
17 
18 //////////////////////////////////////////////////////////////////////////
19 // //
20 // TMemberStreamer is used to stream a data member. //
21 // //
22 // The address passed to operator() will be the address of the data //
23 // member. //
24 // //
25 //////////////////////////////////////////////////////////////////////////
26 
27 class TMemberStreamer {
28 protected:
29  TMemberStreamer() : fStreamer(0) {};
30 
31 public:
32  TMemberStreamer(MemberStreamerFunc_t pointer) : fStreamer(pointer) {};
33  TMemberStreamer(const TMemberStreamer &rhs) : fStreamer(rhs.fStreamer) {};
34  TMemberStreamer &operator=(const TMemberStreamer &rhs) { fStreamer = rhs.fStreamer; return *this; }
35 
36  virtual ~TMemberStreamer(){};
37 
38  virtual void SetOnFileClass( const TClass* cl ) { fOnFileClass = const_cast<TClass*>(cl); }
39  virtual const TClass* GetOnFileClass() const { return fOnFileClass; }
40 
41  virtual void operator()(TBuffer &b, void *pmember, Int_t size=0)
42  {
43  // The address passed to operator() will be the address of the data member.
44  // If the data member is a variable size array, 'size' is the number of elements
45  // to read/write
46 
47  (*fStreamer)(b,pmember,size);
48  }
49 
50 private:
51  MemberStreamerFunc_t fStreamer;
52  TClassRef fOnFileClass;
53 };
54 
55 #endif