mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2024-12-01 13:24:25 +01:00
Better treatement of deprecated callclasses
--HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40393
This commit is contained in:
parent
cdead2f8fc
commit
ac92e7ff05
Binary file not shown.
@ -298,15 +298,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class B> struct CallClass
|
template<class B> struct DeprecatedCallClass
|
||||||
{
|
{
|
||||||
virtual B *GetThisPtr() = 0;
|
virtual B *GetThisPtr() = 0;
|
||||||
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef CallClass<void> GenericCallClass;
|
|
||||||
typedef CallClass<EmptyClass> ManualCallClass;
|
|
||||||
|
|
||||||
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
||||||
// - Today is an important day.
|
// - Today is an important day.
|
||||||
// I'm adding support for functions which return references.
|
// I'm adding support for functions which return references.
|
||||||
@ -408,14 +405,14 @@ namespace SourceHook
|
|||||||
* @param iface The interface pointer
|
* @param iface The interface pointer
|
||||||
* @param size Size of the class instance
|
* @param size Size of the class instance
|
||||||
*/
|
*/
|
||||||
virtual GenericCallClass *GetCallClass(void *iface, size_t size) = 0;
|
virtual DeprecatedCallClass<void> *GetCallClass(void *iface, size_t size) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a callclass
|
* @brief Release a callclass
|
||||||
*
|
*
|
||||||
* @param ptr Pointer to the callclass
|
* @param ptr Pointer to the callclass
|
||||||
*/
|
*/
|
||||||
virtual void ReleaseCallClass(GenericCallClass *ptr) = 0;
|
virtual void ReleaseCallClass(DeprecatedCallClass<void> *ptr) = 0;
|
||||||
|
|
||||||
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
||||||
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
||||||
@ -569,11 +566,11 @@ namespace SourceHook
|
|||||||
};
|
};
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
template <class T> struct LegacyCallClass
|
template <class T> struct CallClass
|
||||||
{
|
{
|
||||||
T *ptr;
|
T *ptr;
|
||||||
|
|
||||||
LegacyCallClass(T *p) : ptr(p)
|
CallClass(T *p) : ptr(p)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,17 +580,21 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef CallClass<void> GenericCallClass;
|
||||||
|
typedef CallClass<EmptyClass> ManualCallClass;
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
LegacyCallClass<T> *GetLegacyCallClass(T *p)
|
CallClass<T> *GetCallClass(T *p)
|
||||||
{
|
{
|
||||||
return new LegacyCallClass<T>(p);
|
return new CallClass<T>(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void ReleaseLegacyCallClass(LegacyCallClass<T> *p)
|
void ReleaseCallClass(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
@ -707,12 +708,10 @@ namespace SourceHook
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
#define CallClass LegacyCallClass
|
|
||||||
#define ManualCallClass LegacyCallClass<SourceHook::EmptyClass>
|
|
||||||
|
|
||||||
#define SH_GET_CALLCLASS(ptr) SourceHook::GetLegacyCallClass(ptr)
|
#define SH_GET_CALLCLASS(ptr) SourceHook::GetCallClass(ptr)
|
||||||
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetLegacyCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
||||||
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseLegacyCallClass(ptr)
|
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseCallClass(ptr)
|
||||||
|
|
||||||
// New ADD / REMOVE macros.
|
// New ADD / REMOVE macros.
|
||||||
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
||||||
@ -3166,12 +3165,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T> struct CCW< LegacyCallClass<T> >
|
template <class T> struct CCW< CallClass<T> >
|
||||||
{
|
{
|
||||||
typedef T type;
|
typedef T type;
|
||||||
|
|
||||||
// Get Real Pointer!
|
// Get Real Pointer!
|
||||||
static inline T *GRP(LegacyCallClass<T> *p)
|
static inline T *GRP(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
return p->ptr;
|
return p->ptr;
|
||||||
}
|
}
|
||||||
|
@ -298,15 +298,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class B> struct CallClass
|
template<class B> struct DeprecatedCallClass
|
||||||
{
|
{
|
||||||
virtual B *GetThisPtr() = 0;
|
virtual B *GetThisPtr() = 0;
|
||||||
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef CallClass<void> GenericCallClass;
|
|
||||||
typedef CallClass<EmptyClass> ManualCallClass;
|
|
||||||
|
|
||||||
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
||||||
// - Today is an important day.
|
// - Today is an important day.
|
||||||
// I'm adding support for functions which return references.
|
// I'm adding support for functions which return references.
|
||||||
@ -408,14 +405,14 @@ namespace SourceHook
|
|||||||
* @param iface The interface pointer
|
* @param iface The interface pointer
|
||||||
* @param size Size of the class instance
|
* @param size Size of the class instance
|
||||||
*/
|
*/
|
||||||
virtual GenericCallClass *GetCallClass(void *iface, size_t size) = 0;
|
virtual DeprecatedCallClass<void> *GetCallClass(void *iface, size_t size) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a callclass
|
* @brief Release a callclass
|
||||||
*
|
*
|
||||||
* @param ptr Pointer to the callclass
|
* @param ptr Pointer to the callclass
|
||||||
*/
|
*/
|
||||||
virtual void ReleaseCallClass(GenericCallClass *ptr) = 0;
|
virtual void ReleaseCallClass(DeprecatedCallClass<void> *ptr) = 0;
|
||||||
|
|
||||||
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
||||||
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
||||||
@ -569,11 +566,11 @@ namespace SourceHook
|
|||||||
};
|
};
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
template <class T> struct LegacyCallClass
|
template <class T> struct CallClass
|
||||||
{
|
{
|
||||||
T *ptr;
|
T *ptr;
|
||||||
|
|
||||||
LegacyCallClass(T *p) : ptr(p)
|
CallClass(T *p) : ptr(p)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,17 +580,21 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef CallClass<void> GenericCallClass;
|
||||||
|
typedef CallClass<EmptyClass> ManualCallClass;
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
LegacyCallClass<T> *GetLegacyCallClass(T *p)
|
CallClass<T> *GetCallClass(T *p)
|
||||||
{
|
{
|
||||||
return new LegacyCallClass<T>(p);
|
return new CallClass<T>(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void ReleaseLegacyCallClass(LegacyCallClass<T> *p)
|
void ReleaseCallClass(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
@ -707,12 +708,10 @@ namespace SourceHook
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
#define CallClass LegacyCallClass
|
|
||||||
#define ManualCallClass LegacyCallClass<SourceHook::EmptyClass>
|
|
||||||
|
|
||||||
#define SH_GET_CALLCLASS(ptr) SourceHook::GetLegacyCallClass(ptr)
|
#define SH_GET_CALLCLASS(ptr) SourceHook::GetCallClass(ptr)
|
||||||
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetLegacyCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
||||||
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseLegacyCallClass(ptr)
|
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseCallClass(ptr)
|
||||||
|
|
||||||
// New ADD / REMOVE macros.
|
// New ADD / REMOVE macros.
|
||||||
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
||||||
@ -1286,12 +1285,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T> struct CCW< LegacyCallClass<T> >
|
template <class T> struct CCW< CallClass<T> >
|
||||||
{
|
{
|
||||||
typedef T type;
|
typedef T type;
|
||||||
|
|
||||||
// Get Real Pointer!
|
// Get Real Pointer!
|
||||||
static inline T *GRP(LegacyCallClass<T> *p)
|
static inline T *GRP(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
return p->ptr;
|
return p->ptr;
|
||||||
}
|
}
|
||||||
|
@ -595,7 +595,7 @@ namespace SourceHook
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
GenericCallClass *CSourceHookImpl::GetCallClass(void *iface, size_t size)
|
DeprecatedCallClass<void> *CSourceHookImpl::GetCallClass(void *iface, size_t size)
|
||||||
{
|
{
|
||||||
for (Impl_CallClassList::iterator cciter = m_CallClasses.begin(); cciter != m_CallClasses.end(); ++cciter)
|
for (Impl_CallClassList::iterator cciter = m_CallClasses.begin(); cciter != m_CallClasses.end(); ++cciter)
|
||||||
{
|
{
|
||||||
@ -614,7 +614,7 @@ namespace SourceHook
|
|||||||
return &m_CallClasses.back();
|
return &m_CallClasses.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSourceHookImpl::ReleaseCallClass(GenericCallClass *ptr)
|
void CSourceHookImpl::ReleaseCallClass(DeprecatedCallClass<void> *ptr)
|
||||||
{
|
{
|
||||||
Impl_CallClassList::iterator iter = m_CallClasses.find(ptr);
|
Impl_CallClassList::iterator iter = m_CallClasses.find(ptr);
|
||||||
if (iter == m_CallClasses.end())
|
if (iter == m_CallClasses.end())
|
||||||
|
@ -298,15 +298,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class B> struct CallClass
|
template<class B> struct DeprecatedCallClass
|
||||||
{
|
{
|
||||||
virtual B *GetThisPtr() = 0;
|
virtual B *GetThisPtr() = 0;
|
||||||
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
virtual void *GetOrigFunc(int vtbloffs, int vtblidx) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef CallClass<void> GenericCallClass;
|
|
||||||
typedef CallClass<EmptyClass> ManualCallClass;
|
|
||||||
|
|
||||||
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
// 09.08.2008 (6 AM, I just woke up, the others are still sleeping so i finally can use this notebook !!)
|
||||||
// - Today is an important day.
|
// - Today is an important day.
|
||||||
// I'm adding support for functions which return references.
|
// I'm adding support for functions which return references.
|
||||||
@ -408,14 +405,14 @@ namespace SourceHook
|
|||||||
* @param iface The interface pointer
|
* @param iface The interface pointer
|
||||||
* @param size Size of the class instance
|
* @param size Size of the class instance
|
||||||
*/
|
*/
|
||||||
virtual GenericCallClass *GetCallClass(void *iface, size_t size) = 0;
|
virtual DeprecatedCallClass<void> *GetCallClass(void *iface, size_t size) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a callclass
|
* @brief Release a callclass
|
||||||
*
|
*
|
||||||
* @param ptr Pointer to the callclass
|
* @param ptr Pointer to the callclass
|
||||||
*/
|
*/
|
||||||
virtual void ReleaseCallClass(GenericCallClass *ptr) = 0;
|
virtual void ReleaseCallClass(DeprecatedCallClass<void> *ptr) = 0;
|
||||||
|
|
||||||
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
virtual void SetRes(META_RES res) = 0; //!< Sets the meta result
|
||||||
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
virtual META_RES GetPrevRes() = 0; //!< Gets the meta result of the
|
||||||
@ -569,11 +566,11 @@ namespace SourceHook
|
|||||||
};
|
};
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
template <class T> struct LegacyCallClass
|
template <class T> struct CallClass
|
||||||
{
|
{
|
||||||
T *ptr;
|
T *ptr;
|
||||||
|
|
||||||
LegacyCallClass(T *p) : ptr(p)
|
CallClass(T *p) : ptr(p)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,17 +580,21 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef CallClass<void> GenericCallClass;
|
||||||
|
typedef CallClass<EmptyClass> ManualCallClass;
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
LegacyCallClass<T> *GetLegacyCallClass(T *p)
|
CallClass<T> *GetCallClass(T *p)
|
||||||
{
|
{
|
||||||
return new LegacyCallClass<T>(p);
|
return new CallClass<T>(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void ReleaseLegacyCallClass(LegacyCallClass<T> *p)
|
void ReleaseCallClass(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
@ -707,12 +708,10 @@ namespace SourceHook
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// For source-level compatibility
|
// For source-level compatibility
|
||||||
#define CallClass LegacyCallClass
|
|
||||||
#define ManualCallClass LegacyCallClass<SourceHook::EmptyClass>
|
|
||||||
|
|
||||||
#define SH_GET_CALLCLASS(ptr) SourceHook::GetLegacyCallClass(ptr)
|
#define SH_GET_CALLCLASS(ptr) SourceHook::GetCallClass(ptr)
|
||||||
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetLegacyCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
#define SH_GET_MCALLCLASS(ptr, size) SourceHook::GetCallClass(reinterpret_cast<SourceHook::EmptyClass*>(ptr))
|
||||||
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseLegacyCallClass(ptr)
|
#define SH_RELEASE_CALLCLASS(ptr) SourceHook::ReleaseCallClass(ptr)
|
||||||
|
|
||||||
// New ADD / REMOVE macros.
|
// New ADD / REMOVE macros.
|
||||||
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
#define SH_STATIC(func) fastdelegate::MakeDelegate(func)
|
||||||
@ -3166,12 +3165,12 @@ namespace SourceHook
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T> struct CCW< LegacyCallClass<T> >
|
template <class T> struct CCW< CallClass<T> >
|
||||||
{
|
{
|
||||||
typedef T type;
|
typedef T type;
|
||||||
|
|
||||||
// Get Real Pointer!
|
// Get Real Pointer!
|
||||||
static inline T *GRP(LegacyCallClass<T> *p)
|
static inline T *GRP(CallClass<T> *p)
|
||||||
{
|
{
|
||||||
return p->ptr;
|
return p->ptr;
|
||||||
}
|
}
|
||||||
|
@ -170,10 +170,6 @@ New SH_CALL
|
|||||||
the original function. Everything works fine. This works even for VP hooks.
|
the original function. Everything works fine. This works even for VP hooks.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// See sourcehook.hxx :)
|
|
||||||
#undef CallClass
|
|
||||||
#undef ManualCallClass
|
|
||||||
|
|
||||||
namespace SourceHook
|
namespace SourceHook
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -555,7 +551,7 @@ namespace SourceHook
|
|||||||
void AddHookManager(Plugin plug, const CHookManagerInfo &hookman);
|
void AddHookManager(Plugin plug, const CHookManagerInfo &hookman);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CCallClassImpl : public GenericCallClass
|
class CCallClassImpl : public DeprecatedCallClass<void>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -721,14 +717,14 @@ namespace SourceHook
|
|||||||
* @param iface The interface pointer
|
* @param iface The interface pointer
|
||||||
* @param size Size of the class instance
|
* @param size Size of the class instance
|
||||||
*/
|
*/
|
||||||
GenericCallClass *GetCallClass(void *iface, size_t size);
|
DeprecatedCallClass<void> *GetCallClass(void *iface, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a callclass
|
* @brief Release a callclass
|
||||||
*
|
*
|
||||||
* @param ptr Pointer to the callclass
|
* @param ptr Pointer to the callclass
|
||||||
*/
|
*/
|
||||||
virtual void ReleaseCallClass(GenericCallClass *ptr);
|
virtual void ReleaseCallClass(DeprecatedCallClass<void> *ptr);
|
||||||
|
|
||||||
virtual void SetRes(META_RES res); //!< Sets the meta result
|
virtual void SetRes(META_RES res); //!< Sets the meta result
|
||||||
virtual META_RES GetPrevRes(); //!< Gets the meta result of the previously called handler
|
virtual META_RES GetPrevRes(); //!< Gets the meta result of the previously called handler
|
||||||
|
Loading…
Reference in New Issue
Block a user