// @(#)root/base:$Name:  $:$Id: TObjPtr.h,v 1.3 2002/05/18 08:21:58 brun Exp $
// Author: Fons Rademakers   04/05/96

/*************************************************************************
 * Copyright (C) 1995-2000, 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_TObjPtr
#define ROOT_TObjPtr


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TObjPtr                                                              //
//                                                                      //
// Collectable generic pointer class. This is a TObject containing a    //
// void *.                                                              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TObject
#include "TObject.h"
#endif


class TObjPtr : public TObject {

private:
   const void  *fPtr;       //Wrapped pointer

public:
   TObjPtr(const void *p = 0) : fPtr(p) { }
   TObjPtr(const TObjPtr &p) : TObject(p),  fPtr(p.fPtr) { }
   ~TObjPtr() { }
   Int_t     Compare(const TObject *obj) const;
   ULong_t   Hash() const { return (ULong_t) fPtr >> 2; }
   Bool_t    IsSortable() const { return kTRUE; }
   Bool_t    IsEqual(const TObject *obj) const { return fPtr == obj; }
   void     *Ptr() const { return (void *)fPtr; }

   //ClassDef(TObjPtr,1)  //Collectable generic pointer class
};

#endif
