本文整理汇总了C++中ASSERT_M函数的典型用法代码示例。如果您正苦于以下问题:C++ ASSERT_M函数的具体用法?C++ ASSERT_M怎么用?C++ ASSERT_M使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ASSERT_M函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ASSERT_M
int64_t DSoundBuf::GetPosition() const
{
DWORD iCursor, iJunk;
HRESULT hr = m_pBuffer->GetCurrentPosition( &iCursor, &iJunk );
ASSERT_M( SUCCEEDED(hr), hr_ssprintf(hr, "GetCurrentPosition") );
/* This happens occasionally on "Realtek AC97 Audio". */
if( (int) iCursor == m_iBufferSize )
iCursor = 0;
ASSERT_M( (int) iCursor < m_iBufferSize, ssprintf("%i, %i", iCursor, m_iBufferSize) );
int iCursorFrames = int(iCursor) / bytes_per_frame();
int iWriteCursorFrames = m_iWriteCursor / bytes_per_frame();
int iFramesBehind = iWriteCursorFrames - iCursorFrames;
/* iFramesBehind will be 0 if we're called before the buffer starts playing:
* both iWriteCursorFrames and iCursorFrames will be 0. */
if( iFramesBehind < 0 )
iFramesBehind += buffersize_frames(); /* unwrap */
int64_t iRet = m_iWriteCursorPos - iFramesBehind;
/* Failsafe: never return a value smaller than we've already returned.
* This can happen once in a while in underrun conditions. */
iRet = max( m_iLastPosition, iRet );
m_iLastPosition = iRet;
return iRet;
}
示例2: ASSERT_M
TapNoteScore PlayerAI::GetTapNoteScore( const PlayerState* pPlayerState )
{
if( pPlayerState->m_PlayerController == PC_AUTOPLAY )
return TNS_MARVELOUS;
int iCpuSkill = pPlayerState->m_iCpuSkill;
/* If we're in battle mode, reduce the skill based on the number of modifier attacks
* against us. If we're in demonstration or jukebox mode with modifiers attached,
* don't make demonstration miss a lot. */
if( !GAMESTATE->m_bDemonstrationOrJukebox )
{
int iSumOfAttackLevels =
pPlayerState->m_fSecondsUntilAttacksPhasedOut > 0 ?
pPlayerState->m_iLastPositiveSumOfAttackLevels :
0;
ASSERT_M( iCpuSkill>=0 && iCpuSkill<NUM_SKILL_LEVELS, ssprintf("%i", iCpuSkill) );
ASSERT_M( pPlayerState->m_PlayerController == PC_CPU, ssprintf("%i", pPlayerState->m_PlayerController) );
iCpuSkill -= iSumOfAttackLevels*3;
CLAMP( iCpuSkill, 0, NUM_SKILL_LEVELS-1 );
}
TapScoreDistribution& distribution = g_Distributions[iCpuSkill];
return distribution.GetTapNoteScore();
}
示例3: lua_pushstring
CString LuaData::Serialize() const
{
/* Call Serialize(t), where t is our referenced object. */
Lua *L = LUA->Get();
lua_pushstring( L, "Serialize" );
lua_gettable( L, LUA_GLOBALSINDEX );
ASSERT_M( !lua_isnil(L, -1), "Serialize() missing" );
ASSERT_M( lua_isfunction(L, -1), "Serialize() not a function" );
/* Arg 1 (t): */
this->PushSelf( L );
lua_call( L, 1, 1 );
/* The return value is a string, which we store in m_sSerializedData. */
const char *pString = lua_tostring( L, -1 );
ASSERT_M( pString != NULL, "Serialize() didn't return a string" );
CString sRet = pString;
lua_pop( L, 1 );
LUA->Release( L );
return sRet;
}
示例4: HashFile
static bool HashFile( RageFileBasic &f, unsigned char buf_hash[20], int iHash )
{
hash_state hash;
int iRet = hash_descriptor[iHash].init( &hash );
ASSERT_M( iRet == CRYPT_OK, error_to_string(iRet) );
RString s;
while( !f.AtEOF() )
{
s.erase();
if( f.Read(s, 1024*4) == -1 )
{
LOG->Warn( "Error reading %s: %s", f.GetDisplayPath().c_str(), f.GetError().c_str() );
hash_descriptor[iHash].done( &hash, buf_hash );
return false;
}
iRet = hash_descriptor[iHash].process( &hash, (const unsigned char *) s.data(), s.size() );
ASSERT_M( iRet == CRYPT_OK, error_to_string(iRet) );
}
iRet = hash_descriptor[iHash].done( &hash, buf_hash );
ASSERT_M( iRet == CRYPT_OK, error_to_string(iRet) );
return true;
}
示例5: defined
void MovieTexture_FFMpeg::DecoderThread()
{
#if defined(_WINDOWS)
/* Windows likes to boost priority when processes come out of a wait state. We don't
* want that, since it'll result in us having a small priority boost after each movie
* frame, resulting in skips in the gameplay thread. */
if( !SetThreadPriorityBoost(GetCurrentThread(), TRUE) && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED )
LOG->Warn( werr_ssprintf(GetLastError(), "SetThreadPriorityBoost failed") );
#endif
CHECKPOINT;
while( m_State != DECODER_QUIT )
{
if( m_ImageWaiting == FRAME_NONE )
DecodeFrame();
/* If we still have no frame, we're at EOF and we didn't loop. */
if( m_ImageWaiting != FRAME_DECODED )
{
usleep( 10000 );
continue;
}
const float fTime = CheckFrameTime();
if( fTime == -1 ) // skip frame
{
DiscardFrame();
}
else if( fTime > 0 ) // not time to decode a new frame yet
{
/* This needs to be relatively short so that we wake up quickly
* from being paused or for changes in m_Rate. */
usleep( 10000 );
}
else // fTime == 0
{
{
/* The only reason m_BufferFinished might be non-zero right now (before
* ConvertFrame()) is if we're quitting. */
int n = m_BufferFinished.GetValue();
ASSERT_M( n == 0 || m_State == DECODER_QUIT, ssprintf("%i, %i", n, m_State) );
}
ConvertFrame();
/* We just went into FRAME_WAITING. Don't actually check; the main thread
* will change us back to FRAME_NONE without locking, and poke m_BufferFinished.
* Don't time out on this; if a new screen has started loading, this might not
* return for a while. */
m_BufferFinished.Wait( false );
/* If the frame wasn't used, then we must be shutting down. */
ASSERT_M( m_ImageWaiting == FRAME_NONE || m_State == DECODER_QUIT, ssprintf("%i, %i", m_ImageWaiting, m_State) );
}
}
CHECKPOINT;
}
示例6: ASSERT_M
int RageFileObjDirect::GetFileSize() const
{
const int iOldPos = (int)lseek( m_iFD, 0, SEEK_CUR );
ASSERT_M( iOldPos != -1, ssprintf("\"%s\": %s", m_sPath.c_str(), strerror(errno)) );
const int iRet = (int)lseek( m_iFD, 0, SEEK_END );
ASSERT_M( iRet != -1, ssprintf("\"%s\": %s", m_sPath.c_str(), strerror(errno)) );
lseek( m_iFD, iOldPos, SEEK_SET );
return iRet;
}
示例7: CHECKPOINT_M
void StageStats::AssertValid( PlayerNumber pn ) const
{
if( vpSongs[0] )
CHECKPOINT_M( vpSongs[0]->GetFullTranslitTitle() );
ASSERT( vpSteps[pn][0] );
ASSERT_M( playMode < NUM_PLAY_MODES, ssprintf("playmode %i", playMode) );
ASSERT( pStyle != NULL );
ASSERT_M( vpSteps[pn][0]->GetDifficulty() < NUM_DIFFICULTIES, ssprintf("difficulty %i", vpSteps[pn][0]->GetDifficulty()) );
ASSERT( vpSongs.size() == vpSteps[pn].size() );
}
示例8: ASSERT
void StageStats::AssertValid( MultiPlayer pn ) const
{
ASSERT( m_vpPlayedSongs.size() != 0 );
ASSERT( m_vpPossibleSongs.size() != 0 );
if( m_vpPlayedSongs[0] )
CHECKPOINT_M( m_vpPlayedSongs[0]->GetTranslitFullTitle() );
ASSERT( m_multiPlayer[pn].m_vpPossibleSteps.size() != 0 );
ASSERT( m_multiPlayer[pn].m_vpPossibleSteps[0] != NULL );
ASSERT_M( m_playMode < NUM_PlayMode, ssprintf("playmode %i", m_playMode) );
ASSERT_M( m_player[pn].m_vpPossibleSteps[0]->GetDifficulty() < NUM_Difficulty, ssprintf("difficulty %i", m_player[pn].m_vpPossibleSteps[0]->GetDifficulty()) );
ASSERT( (int) m_vpPlayedSongs.size() == m_player[pn].m_iStepsPlayed );
ASSERT( m_vpPossibleSongs.size() == m_player[pn].m_vpPossibleSteps.size() );
}
示例9: Init
// -1 for iOriginalTracksToTakeFrom means no track
void NoteData::LoadTransformed( const NoteData* pOriginal, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] )
{
// reset all notes
Init();
NoteData Original;
Original.To4s( *pOriginal );
Config( Original );
m_iNumTracks = iNewNumTracks;
// copy tracks
for( int t=0; t<m_iNumTracks; t++ )
{
const int iOriginalTrack = iOriginalTrackToTakeFrom[t];
ASSERT_M( iOriginalTrack < Original.m_iNumTracks, ssprintf("from %i >= %i (to %i)",
iOriginalTrack, Original.m_iNumTracks, iOriginalTrackToTakeFrom[t]));
if( iOriginalTrack == -1 )
continue;
m_TapNotes[t] = Original.m_TapNotes[iOriginalTrack];
}
Convert4sToHoldNotes();
m_AttackMap = Original.GetAttackMap();
}
示例10: SelectExactlyOne
static void SelectExactlyOne( int iSelection, vector<bool> &vbSelectedOut )
{
ASSERT_M( iSelection >= 0 && iSelection < (int) vbSelectedOut.size(),
ssprintf("%d/%u",iSelection, unsigned(vbSelectedOut.size())) );
for( int i=0; i<int(vbSelectedOut.size()); i++ )
vbSelectedOut[i] = i==iSelection;
}
示例11: switch
BitmapText &OptionRow::GetTextItemForRow( PlayerNumber pn, int iChoiceOnRow )
{
if( m_RowType == OptionRow::ROW_EXIT )
return *m_textItems[0];
bool bOneChoice = m_RowDef.bOneChoiceForAllPlayers;
int index = -1;
switch( m_RowDef.layoutType )
{
case LAYOUT_SHOW_ONE_IN_ROW:
index = bOneChoice ? 0 : pn;
/* If only P2 is enabled, his selections will be in index 0. */
if( m_textItems.size() == 1 )
index = 0;
break;
case LAYOUT_SHOW_ALL_IN_ROW:
index = iChoiceOnRow;
break;
default:
ASSERT(0);
}
ASSERT_M( index < (int)m_textItems.size(), ssprintf("%i < %i", index, (int)m_textItems.size() ) );
return *m_textItems[index];
}
示例12: ASSERT
void Attack::GetAttackBeats( const Song *song, const PlayerState* pPlayerState, float &fStartBeat, float &fEndBeat ) const
{
ASSERT( song );
if( fStartSecond >= 0 )
{
CHECKPOINT;
fStartBeat = song->GetBeatFromElapsedTime( fStartSecond );
fEndBeat = song->GetBeatFromElapsedTime( fStartSecond+fSecsRemaining );
}
else
{
CHECKPOINT;
/* If fStartSecond < 0, then the attack starts right off the screen; this requires
* that a song actually be playing. Pre-queued course attacks must always have
* fStartSecond >= 0. */
ASSERT( GAMESTATE->m_pCurSong );
ASSERT( pPlayerState );
/* We're setting this effect on the fly. If it's an arrow-changing effect
* (transform or note skin), apply it in the future, after what's currently on
* screen, so new arrows will scroll on screen with this effect. */
GAMESTATE->GetUndisplayedBeats( pPlayerState, fSecsRemaining, fStartBeat, fEndBeat );
}
// loading the course should have caught this.
ASSERT_M( fEndBeat >= fStartBeat, ssprintf("%f >= %f", fEndBeat, fStartBeat) );
}
示例13: ASSERT_M
void DSoundBuf::SetVolume( float fVolume )
{
ASSERT_M( fVolume >= 0 && fVolume <= 1, ssprintf("%f",fVolume) );
if( fVolume == 0 )
fVolume = 0.001f; // fix log10f(0) == -INF
float iVolumeLog2 = log10f(fVolume) / log10f(2); /* vol log 2 */
/* Volume is a multiplier; SetVolume wants attenuation in hundredths of a decibel. */
const int iNewVolume = max( int(1000 * iVolumeLog2), DSBVOLUME_MIN );
if( m_iVolume == iNewVolume )
return;
HRESULT hr = m_pBuffer->SetVolume( iNewVolume );
if( FAILED(hr) )
{
static bool bWarned = false;
if( !bWarned )
LOG->Warn( hr_ssprintf(hr, "DirectSoundBuffer::SetVolume(%i) failed", iNewVolume) );
bWarned = true;
return;
}
m_iVolume = iNewVolume;
}
示例14: ASSERT_M
GameInput Style::StyleInputToGameInput( int iCol, PlayerNumber pn ) const
{
ASSERT_M( pn < NUM_PLAYERS && iCol < MAX_COLS_PER_PLAYER,
ssprintf("P%i C%i", pn, iCol) );
bool bUsingOneSide = m_StyleType != StyleType_OnePlayerTwoSides && m_StyleType != StyleType_TwoPlayersSharedSides;
FOREACH_ENUM( GameController, gc)
{
if( bUsingOneSide && gc != (int) pn )
continue;
int iButtonsPerController = INPUTMAPPER->GetInputScheme()->m_iButtonsPerController;
for( GameButton gb=GAME_BUTTON_NEXT; gb < iButtonsPerController; gb=(GameButton)(gb+1) )
{
int iThisInputCol = m_iInputColumn[gc][gb-GAME_BUTTON_NEXT];
if( iThisInputCol == END_MAPPING )
break;
if( iThisInputCol == iCol )
return GameInput( gc, gb );
}
}
FAIL_M( ssprintf("Invalid column number %i for player %i in the style %s", iCol, pn, GAMESTATE->GetCurrentStyle()->m_szName) );
};
示例15: GetFilterToFileNames
static void GetFilterToFileNames( const RString sBaseDir, const Song *pSong, set<RString> &vsPossibleFileNamesOut )
{
vsPossibleFileNamesOut.clear();
if( pSong->m_sGenre.empty() )
return;
ASSERT( !pSong->m_sGroupName.empty() );
IniFile ini;
RString sPath = sBaseDir+pSong->m_sGroupName+"/"+"BackgroundMapping.ini";
ini.ReadFile( sPath );
RString sSection;
bool bSuccess = ini.GetValue( "GenreToSection", pSong->m_sGenre, sSection );
if( !bSuccess )
{
LOG->Warn( "Genre '%s' isn't mapped", pSong->m_sGenre.c_str() );
return;
}
XNode *pSection = ini.GetChild( sSection );
if( pSection == NULL )
{
ASSERT_M( 0, ssprintf("File '%s' refers to a section '%s' that is missing.", sPath.c_str(), sSection.c_str()) );
return;
}
FOREACH_CONST_Attr( pSection, p )
vsPossibleFileNamesOut.insert( p->first );
}