diff options
author | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2019-01-07 18:46:47 +0000 |
---|---|---|
committer | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2019-01-07 18:46:47 +0000 |
commit | 5c9af39cfd345fffa826958615fd7c16f630bf52 (patch) | |
tree | 752b6fff65803c4bfd15ab3d76dd36ff3e385c53 /Gem/develop | |
parent | 4b0ae1ca2f680a3148a65960a4aeec647b7129f3 (diff) |
Gem 8d663a43c3a8c10e7ed7666131fa412a4db6bb32 linux/amd64
built 'master:8d663a43c3a8c10e7ed7666131fa412a4db6bb32' for linux/amd64
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 |