    // @(#)root/cont:$Name:  $:$Id: TEmulatedMapProxy.h,v 1.2 2005/02/25 17:06:34 brun Exp $
    // Author: Markus Frank  28/10/04

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

    //////////////////////////////////////////////////////////////////////////
    //                                                                      //
    // TEmulatedMapProxy
    //
    // Streamer around an arbitrary STL like container, which implements basic
    // container functionality.
    //
    //////////////////////////////////////////////////////////////////////////

    #include "TEmulatedCollectionProxy.h"

    class TEmulatedMapProxy : public TEmulatedCollectionProxy  {

    protected:
      /// Map input streamer
      void ReadMap(int nElements, TBuffer &b);

      /// Map output streamer
      void WriteMap(int nElements, TBuffer &b);

    public:
      /// Virtual copy constructor
      virtual TVirtualCollectionProxy* Generate() const;

      /// Copy constructor
      TEmulatedMapProxy(const TEmulatedMapProxy& copy);

      /// Initializing constructor
      TEmulatedMapProxy(const char* cl_name);

      /// Standard destructor
      virtual ~TEmulatedMapProxy();

      /// Return the address of the value at index 'idx'
      virtual void *At(UInt_t idx);

      /// Return the current size of the container
      virtual UInt_t Size() const;

      /// Streamer for I/O handling
      virtual void Streamer(TBuffer &refBuffer);

      /// Streamer I/O overload
      virtual void Streamer(TBuffer &buff, void *pObj, int siz) {
        TEmulatedCollectionProxy::Streamer(buff,pObj,siz);
      }
    };

    #endif