better asserts
tolerate a list not importing any options (eg. Fail30Misses selected but not available)
This commit is contained in:
@@ -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] );
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
Reference in New Issue
Block a user