probably safer: ConvertValue
This commit is contained in:
@@ -426,7 +426,7 @@ void LightsManager::ChangeTestCabinetLight( int iDir )
|
|||||||
m_iControllerTestManualCycleCurrent = -1;
|
m_iControllerTestManualCycleCurrent = -1;
|
||||||
|
|
||||||
m_clTestManualCycleCurrent = (CabinetLight)(m_clTestManualCycleCurrent+iDir);
|
m_clTestManualCycleCurrent = (CabinetLight)(m_clTestManualCycleCurrent+iDir);
|
||||||
wrap( UnionCast(m_clTestManualCycleCurrent), NUM_CabinetLight );
|
wrap( *ConvertValue<int>(&m_clTestManualCycleCurrent), NUM_CabinetLight );
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightsManager::ChangeTestGameButtonLight( int iDir )
|
void LightsManager::ChangeTestGameButtonLight( int iDir )
|
||||||
|
|||||||
@@ -1161,7 +1161,7 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
|||||||
pNode->GetChildValue( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
pNode->GetChildValue( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
||||||
pNode->GetChildValue( "CurrentCombo", m_iCurrentCombo );
|
pNode->GetChildValue( "CurrentCombo", m_iCurrentCombo );
|
||||||
pNode->GetChildValue( "TotalCaloriesBurned", m_fTotalCaloriesBurned );
|
pNode->GetChildValue( "TotalCaloriesBurned", m_fTotalCaloriesBurned );
|
||||||
pNode->GetChildValue( "GoalType", UnionCast(m_GoalType) );
|
pNode->GetChildValue( "GoalType", *ConvertValue<int>(&m_GoalType) );
|
||||||
pNode->GetChildValue( "GoalCalories", m_iGoalCalories );
|
pNode->GetChildValue( "GoalCalories", m_iGoalCalories );
|
||||||
pNode->GetChildValue( "GoalSeconds", m_iGoalSeconds );
|
pNode->GetChildValue( "GoalSeconds", m_iGoalSeconds );
|
||||||
pNode->GetChildValue( "LastPlayedMachineGuid", m_sLastPlayedMachineGuid );
|
pNode->GetChildValue( "LastPlayedMachineGuid", m_sLastPlayedMachineGuid );
|
||||||
|
|||||||
@@ -135,6 +135,40 @@ int &UnionCast( T &e )
|
|||||||
return CastSimilarTypes<int,T>(e);
|
return CastSimilarTypes<int,T>(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper for ConvertValue(). */
|
||||||
|
template<typename TO, typename FROM>
|
||||||
|
struct ConvertValueHelper
|
||||||
|
{
|
||||||
|
explicit ConvertValueHelper( FROM *pVal ): m_pFromValue(pVal)
|
||||||
|
{
|
||||||
|
m_ToValue = static_cast<TO>( *m_pFromValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
~ConvertValueHelper()
|
||||||
|
{
|
||||||
|
*m_pFromValue = static_cast<FROM>( m_ToValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
TO &operator *() { return m_ToValue; }
|
||||||
|
operator TO *() { return &m_ToValue; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
FROM *m_pFromValue;
|
||||||
|
TO m_ToValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Safely temporarily convert between types. For example,
|
||||||
|
*
|
||||||
|
* float f = 10.5;
|
||||||
|
* *ConvertValue<int>(&f) = 12;
|
||||||
|
*/
|
||||||
|
template<typename TO, typename FROM>
|
||||||
|
ConvertValueHelper<TO, FROM> ConvertValue( FROM *pValue )
|
||||||
|
{
|
||||||
|
return ConvertValueHelper<TO, FROM>( pValue );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Safely add an integer to an enum.
|
* Safely add an integer to an enum.
|
||||||
*
|
*
|
||||||
@@ -154,7 +188,7 @@ int &UnionCast( T &e )
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
static inline void enum_add( T &val, int iAmt )
|
static inline void enum_add( T &val, int iAmt )
|
||||||
{
|
{
|
||||||
UnionCast( val ) += iAmt;
|
*ConvertValue<int>(&val) += iAmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|||||||
@@ -406,7 +406,7 @@ void ScreenTextEntryVisual::MoveY( int iDir )
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
m_iFocusY = enum_add2( m_iFocusY, +iDir );
|
m_iFocusY = enum_add2( m_iFocusY, +iDir );
|
||||||
wrap( UnionCast(m_iFocusY), NUM_KeyboardRow );
|
wrap( *ConvertValue<int>(&m_iFocusY), NUM_KeyboardRow );
|
||||||
|
|
||||||
// HACK: Round to nearest option so that we always stop
|
// HACK: Round to nearest option so that we always stop
|
||||||
// on KEYBOARD_ROW_SPECIAL.
|
// on KEYBOARD_ROW_SPECIAL.
|
||||||
|
|||||||
Reference in New Issue
Block a user