#ifndef EHANDLE_H #define EHANDLE_H #ifdef _WIN32 #pragma once #endif #if defined( _DEBUG ) && defined( GAME_DLL ) #include "tier0/dbg.h" #include "cbase.h" #endif #include "const.h" #include "basehandle.h" #include "entitylist_base.h" #include "icliententitylist.h" class IHandleEntity; inline IHandleEntity* CBaseHandle::Get() const { extern IClientEntityList* g_pEntityList; return ((CBaseEntityList*)g_pEntityList)->LookupEntity(*this); } template< class T > class CHandle : public CBaseHandle { public: CHandle(); CHandle(int iEntry, int iSerialNumber); CHandle(const CBaseHandle& handle); CHandle(T* pVal); static CHandle FromIndex(int index); T* Get() const; void Set(const T* pVal); operator T* (); operator T* () const; bool operator !() const; bool operator==(T* val) const; bool operator!=(T* val) const; const CBaseHandle& operator=(const T* val); T* operator->() const; }; template CHandle::CHandle() { } template CHandle::CHandle(int iEntry, int iSerialNumber) { Init(iEntry, iSerialNumber); } template CHandle::CHandle(const CBaseHandle& handle) : CBaseHandle(handle) { } template CHandle::CHandle(T* pObj) { Term(); Set(pObj); } template inline CHandle CHandle::FromIndex(int index) { CHandle ret; ret.m_Index = index; return ret; } template inline T* CHandle::Get() const { return (T*)CBaseHandle::Get(); } template inline CHandle::operator T* () { return Get(); } template inline CHandle::operator T* () const { return Get(); } template inline bool CHandle::operator !() const { return !Get(); } template inline bool CHandle::operator==(T* val) const { return Get() == val; } template inline bool CHandle::operator!=(T* val) const { return Get() != val; } template void CHandle::Set(const T* pVal) { CBaseHandle::Set(reinterpret_cast(pVal)); } template inline const CBaseHandle& CHandle::operator=(const T* val) { Set(val); return *this; } template T* CHandle::operator -> () const { return Get(); } #endif