Hi, Your Streamer does not need to call TObject::Streamer if you do not use any of the features of TObject (fBits and fUniqueID). In our example with TShape::Streamer, we also do not need to call TAtt3D::Streamer because this class contains only functions and no data members. Rene Brun mathes@ik3.fzk.de wrote: > > Hi, > I have a question concerning custom streamers: > Do I have to write a Streamer (or call the Streamer method) for each base > class of an user defined class ? > In particular, must I call the TObject::Streamer(TBuffer&) from my custom > Streamer ? > > The example: > http://root.cern.ch/root/InputOutput.html#streamer > calls the Tnamed, TAttLine and TAttFill Streamers but not the TAtt3D > Streamer > > In my application I have: > class TMirrorEvent : public TObject > { > public: > TMirrorEvent(); // standard ctor > TMirrorEvent( MiEvent ); // ctor from MiEvent > TMirrorEvent( TShmEvent* ); // ctor from TShmEvent > virtual ~TMirrorEvent(); > > inline void Dump(); // 'dump' contents to stdout > void Update( TShmEvent* ); // update internal references ... > > // access functions for sub structures > public: > inline TMirrorEventHeader* EventHeader(); > inline TMirrorPixelData* PixelData(); > inline TMirrorPixelList* PixelList(); > inline TMirrorFADCData* FADCData(); > > private: > MiEvent pMiEvent; > enum Constructor_t { kCREATE, kMIEVENT, kTSHMEVENT }; > enum Constructor_t fConstructorType; // how object was created > > private: > TMirrorEventHeader* pHeader; // ptr. to TMirrorEventHeader > TMirrorPixelData* pPixelData; // ptr. to TMirrorPixelData > TMirrorPixelList* pPixelList; // ptr. to TMirrorPixelList > TMirrorFADCData* pFADCData; // ptr. to TMirrorFADCData > > ClassDef(TMirrorEvent,MiEVENTVERSION) > }; > > with the Streamer(): > void TMirrorEvent::Streamer(TBuffer &b) > { > if (b.IsReading()) { > Version_t v = b.ReadVersion(); > if ( v != MiEVENTVERSIONv1 ) { > cerr << "Version mismatch in TMirrorPixelList::Streamer()!" << endl; > } > // is this really needed ? > TObject::Streamer( b ); > } else { > b.WriteVersion(TMirrorEvent::IsA()); > // is this really needed ? > TObject::Streamer( b ); > } > > pHeader->Streamer( b ); > pPixelData->Streamer( b ); > pPixelList->Streamer( b ); > pFADCData->Streamer( b ); > } > > The other classes (TMirror*) inherit indeed also from TObject, but don't > call TObject::Streamer(). Both versions work (writing and reading), as > long as I don't mix the data files. But what is the really compatible, > recommended way to go ? > > Thanks and Regards > Hermann-Josef > > ************************************************************************** > * * > * Dr. Hermann-Josef Mathes * > * KASCADE & AUGER Collaboration * > * Forschungszentrum Karlsruhe Phone: +49 7247 822429 * > * Institut fuer Kernphysik FAX: +49 7247 824075 * > * POB 3640 * > * D-76021 Karlsruhe/Germany Mail: mathes@ik3.fzk.de * > * hjmathes@web.de * > * * > ************************************************************************** > * Feel free to visit my homepage: * > * http://www-ik3.fzk.de/~mathes/Welcome.html * > * My software project page for DAQ: * > * http://www-ik3.fzk.de/~mathes/software/software.html * > * * > * Visit the institute and project homepages: * > * http://www-ik3.fzk.de/ * > * http://www-ik1.fzk.de/KASCADE_home.html * > **************************************************************************
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:29 MET