summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2009-01-12 16:53:11 +0000
committersmatz <smatz@openttd.org>2009-01-12 16:53:11 +0000
commit9294f9616866b9778c22076c19b5a32b4f85f788 (patch)
tree28797c13994654c777fdcdaeb0cbaeb1ead87ff9 /src
parenteb6dc2b8ae20251473b8d2ee16279ebc1cae6581 (diff)
downloadopenttd-9294f9616866b9778c22076c19b5a32b4f85f788.tar.xz
(svn r15026) -Codechange: use SpriteTypeByte instead of SpriteType in the SpriteCache struct in order to make it smaller
Diffstat (limited to 'src')
-rw-r--r--src/core/enum_type.hpp32
-rw-r--r--src/spritecache.cpp6
2 files changed, 33 insertions, 5 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 */
diff --git a/src/spritecache.cpp b/src/spritecache.cpp
index 3e270ea3b..e26029a1b 100644
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -17,12 +17,14 @@
#endif /* WITH_PNG */
#include "blitter/factory.hpp"
#include "core/math_func.hpp"
+#include "core/enum_type.hpp"
#include "table/sprites.h"
/* Default of 4MB spritecache */
uint _sprite_cache_size = 4;
+typedef SimpleTinyEnumT<SpriteType, byte> SpriteTypeByte;
struct SpriteCache {
void *ptr;
@@ -30,8 +32,8 @@ struct SpriteCache {
uint32 id;
uint16 file_slot;
int16 lru;
- SpriteType type; ///< In some cases a single sprite is misused by two NewGRFs. Once as real sprite and once as recolour sprite. If the recolour sprite gets into the cache it might be drawn as real sprite which causes enormous trouble.
- bool warned; ///< True iff the user has been warned about incorrect use of this sprite
+ SpriteTypeByte type; ///< In some cases a single sprite is misused by two NewGRFs. Once as real sprite and once as recolour sprite. If the recolour sprite gets into the cache it might be drawn as real sprite which causes enormous trouble.
+ bool warned; ///< True iff the user has been warned about incorrect use of this sprite
};