better asserts

tolerate a list not importing any options (eg. Fail30Misses selected but
not available)
This commit is contained in:
Glenn Maynard
2005-03-11 02:01:55 +00:00
parent a22b272aeb
commit 295bb05566
2 changed files with 11 additions and 4 deletions
+5 -4
View File
@@ -737,15 +737,16 @@ void OptionRow::HandleMessage( const CString& sMessage )
#define INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( vbSelected ) \ #define INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( vbSelected ) \
if( GetFirstItemGoesDown() ) \ if( GetFirstItemGoesDown() ) \
vbSelected.insert( vbSelected.begin(), false ); vbSelected.insert( vbSelected.begin(), false );
static void VerifySelected( SelectType st, const vector<bool> &vbSelected ) static void VerifySelected( SelectType st, const vector<bool> &vbSelected, const CString &sName )
{ {
int iNumSelected = 0; int iNumSelected = 0;
if( st == SELECT_ONE ) if( st == SELECT_ONE )
{ {
ASSERT_M( vbSelected.size() > 0, ssprintf("%s: %i/%i", sName.c_str(), iNumSelected, vbSelected.size()) );
for( unsigned e = 0; e < vbSelected.size(); ++e ) for( unsigned e = 0; e < vbSelected.size(); ++e )
if( vbSelected[e] ) if( vbSelected[e] )
iNumSelected++; iNumSelected++;
ASSERT( iNumSelected == 1 ); ASSERT_M( iNumSelected == 1, ssprintf("%s: %i/%i", sName.c_str(), iNumSelected, vbSelected.size()) );
} }
} }
@@ -763,7 +764,7 @@ void OptionRow::ImportOptions( PlayerNumber pn )
ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] );
m_pHand->ImportOption( m_RowDef, pn, m_vbSelected[pn] ); m_pHand->ImportOption( m_RowDef, pn, m_vbSelected[pn] );
INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] ); INSERT_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] );
VerifySelected( m_RowDef.selectType, m_vbSelected[pn] ); VerifySelected( m_RowDef.selectType, m_vbSelected[pn], m_RowDef.name );
} }
void OptionRow::ImportOptions() void OptionRow::ImportOptions()
@@ -781,7 +782,7 @@ int OptionRow::ExportOptions( PlayerNumber pn )
int iChangeMask = 0; int iChangeMask = 0;
VerifySelected( m_RowDef.selectType, m_vbSelected[pn] ); VerifySelected( m_RowDef.selectType, m_vbSelected[pn], m_RowDef.name );
ASSERT( m_vbSelected[pn].size() == m_RowDef.choices.size() ); ASSERT( m_vbSelected[pn].size() == m_RowDef.choices.size() );
ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] ); ERASE_ONE_BOOL_AT_FRONT_IF_NEEDED( m_vbSelected[pn] );
iChangeMask |= m_pHand->ExportOption( m_RowDef, pn, m_vbSelected[pn] ); iChangeMask |= m_pHand->ExportOption( m_RowDef, pn, m_vbSelected[pn] );
+6
View File
@@ -190,6 +190,12 @@ public:
} }
} }
if( UseFallbackOption && FallbackOption == -1 )
{
LOG->Warn( "No options in row \"%s\" were selected, and no fallback row found; selected entry 0", m_sName.c_str() );
FallbackOption = 0;
}
if( def.selectType == SELECT_ONE && if( def.selectType == SELECT_ONE &&
UseFallbackOption && UseFallbackOption &&
FallbackOption != -1 ) FallbackOption != -1 )