    // @(#)root/base:$Name:  $:$Id: TClassStreamer.h,v 1.1 2004/01/10 10:52:29 brun Exp $
    // Author: Victor Perev and Philippe Canal   08/05/02

    /*************************************************************************
     * Copyright (C) 1995-2003, Rene Brun, Fons Rademakers and al.           *
     * All rights reserved.                                                  *
     *                                                                       *
     * For the licensing terms see $ROOTSYS/LICENSE.                         *
     * For the list of contributors see $ROOTSYS/README/CREDITS.             *
     *************************************************************************/

    #ifndef ROOT_TClassStreamer_h
    #define ROOT_TClassStreamer_h

    #include "Rtypes.h"

    //////////////////////////////////////////////////////////////////////////
    //                                                                      //
    // TClassStreamer is used to stream an object of a specific class.      //
    //                                                                      //
    // The address passed to operator() will be the address of the start    //
    // of the  object.                                                      //
    //                                                                      //
    //////////////////////////////////////////////////////////////////////////

    class TClassStreamer {
    protected:
       TClassStreamer() : fStreamer(0) {};

    public:
       TClassStreamer(ClassStreamerFunc_t pointer) : fStreamer(pointer) {};
       TClassStreamer(const TClassStreamer &rhs) : fStreamer(rhs.fStreamer) {};

       virtual  ~TClassStreamer(){};
       virtual void operator()(TBuffer &b, void *objp)
       {
          // The address passed to operator() will be the address of the start of the
          // object.

          (*fStreamer)(b,objp);
       }

    private:
       ClassStreamerFunc_t fStreamer;
    };

    #endif