From e9ec30206df7729f674c568ab3a4ac3ab14afdb8 Mon Sep 17 00:00:00 2001 From: Eric House Date: Mon, 28 Sep 2020 17:16:03 -0700 Subject: [PATCH] add debug-only field tracking place in iterator --- xwords4/common/dictiter.c | 58 ++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/xwords4/common/dictiter.c b/xwords4/common/dictiter.c index dba8279e9..f971de9dc 100644 --- a/xwords4/common/dictiter.c +++ b/xwords4/common/dictiter.c @@ -107,9 +107,13 @@ typedef struct _Indexer { struct DictIter { XP_U16 nEdges; +#ifdef DEBUG + /* Current string: useful when stepping in gdb */ + XP_UCHAR curWord[32]; +#endif struct { #ifdef DEBUG - XP_UCHAR face[8]; + XP_U16 faceLen; #endif array_edge* edge; PatMatch match; @@ -624,15 +628,6 @@ struct _IPattern { } DIPattern; #ifdef DEBUG -static void -formatCurWord( const DictIter* iter, XP_UCHAR* buf, XP_U16 bufLen ) -{ - int index = 0; - for ( int ii = 0; ii < iter->nEdges; ++ii ) { - index += XP_SNPRINTF( buf +index, bufLen - index, "%s", iter->stack[ii].face ); - } -} - /* static void */ /* logCurWord( const DictIter* iter, const XP_UCHAR* note ) */ /* { */ @@ -1014,17 +1009,14 @@ patMatchFinished( const DictIter* iter, XP_Bool log ) #ifdef DEBUG if ( log ) { - XP_UCHAR word[32]; - formatCurWord( iter, word, VSIZE(word) ); - if ( result ) { XP_UCHAR elemBuf[64]; PrintState prs = { .iter = iter, .buf = elemBuf, .bufLen = VSIZE(elemBuf), }; formatElem( &prs, params.elem ); - XP_LOGFF( "for word %s: => %s (matched elem %d: %s)", word, boolToStr(result), + XP_LOGFF( "for word %s: => %s (matched elem %d: %s)", iter->curWord, boolToStr(result), params.patElemIndx, elemBuf ); } else { - XP_LOGFF( "for word %s: => %s", word, boolToStr(result) ); + XP_LOGFF( "for word %s: => %s", iter->curWord, boolToStr(result) ); } } #endif @@ -1084,9 +1076,12 @@ pushEdge( DictIter* iter, array_edge* edge, PatMatch* match ) iter->stack[nEdges].match = *match; #ifdef DEBUG if ( !!edge ) { /* Will fail when called from di_stringMatches() */ + // XP_LOGFF( "before: %s", iter->curWord ); Tile tile = EDGETILE( iter->dict, edge ); const XP_UCHAR* face = dict_getTileString( iter->dict, tile ); - XP_STRNCPY( iter->stack[nEdges].face, face, VSIZE(iter->stack[nEdges].face) ); + iter->stack[nEdges].faceLen = XP_STRLEN( face ); + XP_STRCAT( iter->curWord, face ); + // XP_LOGFF( "after: %s", iter->curWord ); } #endif return ++iter->nEdges; @@ -1096,6 +1091,14 @@ static array_edge* popEdge( DictIter* iter ) { XP_ASSERT( 0 < iter->nEdges ); +#ifdef DEBUG + // XP_LOGFF( "before: %s", iter->curWord ); + XP_U16 curLen = XP_STRLEN( iter->curWord ); + XP_U16 popLen = iter->stack[iter->nEdges-1].faceLen; + XP_ASSERT( curLen >= popLen ); + iter->curWord[curLen-popLen] = '\0'; + // XP_LOGFF( "after: %s", iter->curWord ); +#endif return iter->stack[--iter->nEdges].edge; } @@ -1145,9 +1148,7 @@ nextWord( DictIter* iter, XP_Bool log ) #ifdef DEBUG if ( log ) { if ( success ) { - XP_UCHAR buf[32] = {0}; - formatCurWord( iter, buf, VSIZE( buf ) ); - XP_LOGFF( "word found: %s", buf ); + XP_LOGFF( "word found: %s", iter->curWord ); } else { XP_LOGFF( "NOTHING FOUND" ); } @@ -1228,19 +1229,11 @@ prevWord( DictIter* iter, XP_Bool log ) #ifdef DEBUG if ( log ) { if ( success ) { - XP_UCHAR buf[32] = {0}; - formatCurWord( iter, buf, VSIZE( buf ) ); - XP_LOGFF( "word found: %s", buf ); + XP_LOGFF( "word found: %s", iter->curWord ); } else { XP_LOGFF( "NOTHING FOUND" ); } } - - /* if ( log && success ) { */ - /* XP_UCHAR buf[32] = {0}; */ - /* formatCurWord( iter, buf, VSIZE( buf ) ); */ - /* XP_LOGFF( "word found: %s", buf ); */ - /* } */ #endif XP_ASSERT( (iter->min <= iter->nEdges && iter->nEdges <= iter->max) || !success ); return success; @@ -1253,6 +1246,9 @@ findStartsWithTiles( DictIter* iter, const Tile* tiles, XP_U16 nTiles ) const DictionaryCtxt* dict = iter->dict; array_edge* edge = dict_getTopEdge( dict ); iter->nEdges = 0; +#ifdef DEBUG + iter->curWord[0] = '\0'; +#endif while ( nTiles > 0 ) { Tile tile = *tiles++; @@ -1932,6 +1928,12 @@ di_wordToString( const DictIter* iter, XP_UCHAR* buf, XP_U16 buflen, { ASSERT_INITED( iter ); iterToString( iter, buf, buflen, delim ); +#ifdef DEBUG + // If there's no delim, debug string should be same + if ( !delim || '\0' != *delim ) { + XP_ASSERT( 0 == XP_STRCMP( buf, iter->curWord ) ); + } +#endif } DictPosition