diff options
author | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2019-01-07 18:46:57 +0000 |
---|---|---|
committer | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2019-01-07 18:46:57 +0000 |
commit | be48f8978f1a25bb3ae4dc456e59db4f69700b87 (patch) | |
tree | c1f3e21206df79b7926d9522d1c037cad1d04ca9 /Gem/develop | |
parent | 71eeb76d1f52ae882d8801166b7ad6de20250f5d (diff) |
Gem 8d663a43c3a8c10e7ed7666131fa412a4db6bb32 osx/i386
built 'master:8d663a43c3a8c10e7ed7666131fa412a4db6bb32' for osx/i386
Diffstat (limited to 'Gem/develop')
-rw-r--r-- | Gem/develop/include/Gem/Gem/State.h | 4 | ||||
-rw-r--r-- | Gem/develop/include/Gem/Utils/any.h | 33 |
2 files changed, 33 insertions, 4 deletions
diff --git a/Gem/develop/include/Gem/Gem/State.h b/Gem/develop/include/Gem/Gem/State.h index b09ace4..173acf9 100644 --- a/Gem/develop/include/Gem/Gem/State.h +++ b/Gem/develop/include/Gem/Gem/State.h @@ -61,8 +61,8 @@ public: typedef enum { _ILLEGAL=-1, _DIRTY, /* "dirty" */ - _TIMING_TICK, /* "timing.tick" */ - _PIX, /* "pix" */ + _TIMING_TICK, /* "timing.tick" <float> */ + _PIX, /* "pix", <*pixBuffer> */ _GL_STACKS, /* "stacks" */ _GL_DISPLAYLIST, /* */ _GL_LIGHTING, /* */ diff --git a/Gem/develop/include/Gem/Utils/any.h b/Gem/develop/include/Gem/Utils/any.h index 5841c79..0861e19 100644 --- a/Gem/develop/include/Gem/Utils/any.h +++ b/Gem/develop/include/Gem/Utils/any.h @@ -27,6 +27,7 @@ #include <algorithm> #include <string> +//#define GEM_ANY_TYPEID_HACK namespace gem { @@ -70,7 +71,7 @@ struct fxns { struct type { static const std::type_info& get_type(void) { -#if 0 +#if GEM_ANY_TYPEID_HACK const std::type_info&res=typeid(T); // the following is a dummy use of the type_info struct // to make the template engine work properly on OSX/10.9 @@ -104,7 +105,7 @@ struct fxns<false> { struct type { static const std::type_info& get_type(void) { -#if 0 +#if GEM_ANY_TYPEID_HACK const std::type_info&res=typeid(T); return res; #else @@ -353,6 +354,34 @@ T const& any_cast(any const& this_) { return *any_cast<T>(const_cast<any*>(&this_)); } +#ifdef GEM_INTERNAL +// Note: The "unsafe" versions of any_cast are not part of the +// public interface (and hence protected by GEM_INTERNAL) and may +// be removed at any time. They are required where we know what type +// is stored in the any and can't use typeid() comparison, e.g., +// when our types may travel across different shared libraries. +template<typename T> +T* unsafe_any_cast(any* this_) +{ + if (sizeof(T) <= sizeof(void*)) { + return reinterpret_cast<T*>(&this_->object); + } else { + return reinterpret_cast<T*>(this_->object); + } +} + +template<typename T> +T const* unsafe_any_cast(any const* this_) +{ + return unsafe_any_cast<T>(const_cast<any*>(this_)); +} + +template<typename T> +T const& unsafe_any_cast(any const& this_) +{ + return *unsafe_any_cast<T>(const_cast<any*>(&this_)); +} +#endif } #ifdef _MSC_VER |