summaryrefslogtreecommitdiff
path: root/game/shared/ehandle.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/ehandle.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/ehandle.h')
-rw-r--r--game/shared/ehandle.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/game/shared/ehandle.h b/game/shared/ehandle.h
new file mode 100644
index 0000000..7e44cf6
--- /dev/null
+++ b/game/shared/ehandle.h
@@ -0,0 +1,169 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#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"
+
+
+class IHandleEntity;
+
+
+// -------------------------------------------------------------------------------------------------- //
+// Game-code CBaseHandle implementation.
+// -------------------------------------------------------------------------------------------------- //
+
+inline IHandleEntity* CBaseHandle::Get() const
+{
+ extern CBaseEntityList *g_pEntityList;
+ return g_pEntityList->LookupEntity( *this );
+}
+
+
+// -------------------------------------------------------------------------------------------------- //
+// CHandle.
+// -------------------------------------------------------------------------------------------------- //
+template< class T >
+class CHandle : public CBaseHandle
+{
+public:
+
+ CHandle();
+ CHandle( int iEntry, int iSerialNumber );
+ CHandle( const CBaseHandle &handle );
+ CHandle( T *pVal );
+
+ // The index should have come from a call to ToInt(). If it hasn't, you're in trouble.
+ 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;
+};
+
+
+// ----------------------------------------------------------------------- //
+// Inlines.
+// ----------------------------------------------------------------------- //
+
+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 // EHANDLE_H