// @(#)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
