Seaside/SpyCustom/sdk/ehandle.h
2021-06-16 18:45:17 +03:00

150 lines
2.3 KiB
C++

#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<T> 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<class T>
CHandle<T>::CHandle()
{
}
template<class T>
CHandle<T>::CHandle(int iEntry, int iSerialNumber)
{
Init(iEntry, iSerialNumber);
}
template<class T>
CHandle<T>::CHandle(const CBaseHandle& handle)
: CBaseHandle(handle)
{
}
template<class T>
CHandle<T>::CHandle(T* pObj)
{
Term();
Set(pObj);
}
template<class T>
inline CHandle<T> CHandle<T>::FromIndex(int index)
{
CHandle<T> ret;
ret.m_Index = index;
return ret;
}
template<class T>
inline T* CHandle<T>::Get() const
{
return (T*)CBaseHandle::Get();
}
template<class T>
inline CHandle<T>::operator T* ()
{
return Get();
}
template<class T>
inline CHandle<T>::operator T* () const
{
return Get();
}
template<class T>
inline bool CHandle<T>::operator !() const
{
return !Get();
}
template<class T>
inline bool CHandle<T>::operator==(T* val) const
{
return Get() == val;
}
template<class T>
inline bool CHandle<T>::operator!=(T* val) const
{
return Get() != val;
}
template<class T>
void CHandle<T>::Set(const T* pVal)
{
CBaseHandle::Set(reinterpret_cast<const IHandleEntity*>(pVal));
}
template<class T>
inline const CBaseHandle& CHandle<T>::operator=(const T* val)
{
Set(val);
return *this;
}
template<class T>
T* CHandle<T>::operator -> () const
{
return Get();
}
#endif