diff options
| author | Adam <Adam@anope.org> | 2012-04-25 14:29:50 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2012-04-25 14:29:50 -0400 |
| commit | 1081ecdae80d10bcac0f8543d665c5579f271e61 (patch) | |
| tree | 7b2665bc103c7306b2ec08afc46bac5e7689eb38 /include | |
| parent | 2370c16f1e9d395e47fc8963b1c301dff160c547 (diff) | |
Fixed non-debug build
Diffstat (limited to 'include')
| -rw-r--r-- | include/anope.h | 22 | ||||
| -rw-r--r-- | include/extensible.h | 2 | ||||
| -rw-r--r-- | include/modes.h | 2 |
3 files changed, 19 insertions, 7 deletions
diff --git a/include/anope.h b/include/anope.h index c67b1decb..a5056d50c 100644 --- a/include/anope.h +++ b/include/anope.h @@ -596,25 +596,37 @@ template<typename T> inline T convertTo(const Anope::string &s, bool failIfLefto return x; } -/** Debug cast to be used instead of dynamic_cast, this uses dynamic_cast - * for debug builds and static_cast on releass builds to speed up the program - * because dynamic_cast relies on RTTI. +/** Casts to be used instead of dynamic_cast, this uses dynamic_cast + * for debug builds and static_cast/reinterpret_cast on releass builds + * to speed up the program because dynamic_cast relies on RTTI. */ #ifdef DEBUG_BUILD # include <typeinfo> #endif -template<typename T, typename O> inline T debug_cast(O ptr) +template<typename T, typename O> inline T anope_dynamic_static_cast(O ptr) { #ifdef DEBUG_BUILD T ret = dynamic_cast<T>(ptr); if (ptr != NULL && ret == NULL) - throw CoreException(Anope::string("debug_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail"); + throw CoreException(Anope::string("anope_dynamic_static_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail"); return ret; #else return static_cast<T>(ptr); #endif } +template<typename T, typename O> inline T anope_dynamic_reinterpret_cast(O ptr) +{ +#ifdef DEBUG_BUILD + T ret = dynamic_cast<T>(ptr); + if (ptr != NULL && ret == NULL) + throw CoreException(Anope::string("anope_dynamic_reinterpret_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail"); + return ret; +#else + return reinterpret_cast<T>(ptr); +#endif +} + /*************************************************************************/ /** Class with the ability to keep flags on items, they should extend from this diff --git a/include/extensible.h b/include/extensible.h index e0281c197..6e6d42fb7 100644 --- a/include/extensible.h +++ b/include/extensible.h @@ -90,7 +90,7 @@ class CoreExport Extensible { extensible_map::const_iterator it = this->extension_items.find(key); if (it != this->extension_items.end()) - return debug_cast<T>(it->second); + return anope_dynamic_static_cast<T>(it->second); return NULL; } diff --git a/include/modes.h b/include/modes.h index 0fb822b7e..52545d1b9 100644 --- a/include/modes.h +++ b/include/modes.h @@ -113,7 +113,7 @@ enum ModeClass /** This class is the basis of all modes in Anope */ -class CoreExport Mode : public virtual Base +class CoreExport Mode : public Base { public: /* Class of mode this is */ |
