diff options
author | smatz <smatz@openttd.org> | 2009-01-12 16:53:11 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2009-01-12 16:53:11 +0000 |
commit | ec97e1fd0d6ca942805fa25d94007437bc0ed952 (patch) | |
tree | 28797c13994654c777fdcdaeb0cbaeb1ead87ff9 /src/core/enum_type.hpp | |
parent | 9d659c306d1c9cf09cddf9c3dc0b234076ec4e77 (diff) | |
download | openttd-ec97e1fd0d6ca942805fa25d94007437bc0ed952.tar.xz |
(svn r15026) -Codechange: use SpriteTypeByte instead of SpriteType in the SpriteCache struct in order to make it smaller
Diffstat (limited to 'src/core/enum_type.hpp')
-rw-r--r-- | src/core/enum_type.hpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/core/enum_type.hpp b/src/core/enum_type.hpp index bd059212c..6e1da3dda 100644 --- a/src/core/enum_type.hpp +++ b/src/core/enum_type.hpp @@ -74,8 +74,7 @@ template <typename Tenum_t> struct TinyEnumT; /** The general declaration of TinyEnumT<> (above) */ template <typename Tenum_t> -struct TinyEnumT -{ +struct TinyEnumT { typedef Tenum_t enum_type; ///< expose our enumeration type (i.e. Trackdir) to outside typedef EnumPropsT<Tenum_t> Props; ///< make easier access to our enumeration propeties typedef typename Props::storage storage_type; ///< small storage type @@ -121,4 +120,31 @@ struct TinyEnumT } }; -#endif /* HELPERS_HPP */ + +/** Template of struct holding enum types (on most archs, enums are stored in an int32). No math operators are provided. */ +template <typename enum_type, typename storage_type> +struct SimpleTinyEnumT { + storage_type m_val; ///< here we hold the actual value in small (i.e. byte) form + + /** Cast operator - invoked then the value is assigned to the storage_type */ + FORCEINLINE operator enum_type () const + { + return (enum_type)this->m_val; + } + + /** Assignment operator (from enum_type) */ + FORCEINLINE SimpleTinyEnumT &operator = (enum_type e) + { + this->m_val = (storage_type)e; + return *this; + } + + /** Assignment operator (from general uint) */ + FORCEINLINE SimpleTinyEnumT &operator = (uint u) + { + this->m_val = (storage_type)u; + return *this; + } +}; + +#endif /* ENUM_TYPE_HPP */ |