Make wrap a template to avoid type-punning
authorMikko Rasa <tdb@tdb.fi>
Wed, 2 Nov 2011 10:46:16 +0000 (12:46 +0200)
committerMikko Rasa <tdb@tdb.fi>
Wed, 2 Nov 2011 10:46:16 +0000 (12:46 +0200)
src/RageUtil.h
src/ScreenTextEntry.cpp

index 476cd2b..a5a566e 100755 (executable)
@@ -56,11 +56,14 @@ inline bool CLAMP(float &x, float l, float h)
        return false;
 }
 
-inline void wrap( int &x, int n )
+template<typename T>
+inline void wrap( T &x, int n )
 {
-       if (x<0)
-               x += ((-x/n)+1)*n;
-       x %= n;
+       int xi = x;
+       if (xi<0)
+               xi += ((-xi/n)+1)*n;
+       xi %= n;
+       x = static_cast<T>(xi);
 }
 inline void wrap( unsigned &x, unsigned n )
 {
index ce12642..83352d0 100755 (executable)
@@ -289,7 +289,7 @@ void ScreenTextEntry::MoveY( int iDir )
        do
        {
                m_iFocusY = (KeyboardRow)(m_iFocusY + iDir);
-               wrap( (int&)m_iFocusY, NUM_KEYBOARD_ROWS );
+               wrap( m_iFocusY, NUM_KEYBOARD_ROWS );
 
                // HACK: Round to nearest option so that we always stop 
                // on KEYBOARD_ROW_SPECIAL.