/* ============ idStr::Replace ============ */ void idStr::Replace( const char *old, const char *nw ) { int oldLen, newLen, i, j, count; idStr oldString( data ); oldLen = strlen( old ); newLen = strlen( nw ); // Work out how big the new string will be count = 0; for( i = 0; i < oldString.Length(); i++ ) { if( !idStr::Cmpn( &oldString[i], old, oldLen ) ) { count++; i += oldLen - 1; } } if( count ) { EnsureAlloced( len + ( ( newLen - oldLen ) * count ) + 2, false ); // Replace the old data with the new data for( i = 0, j = 0; i < oldString.Length(); i++ ) { if( !idStr::Cmpn( &oldString[i], old, oldLen ) ) { memcpy( data + j, nw, newLen ); i += oldLen - 1; j += newLen; } else { data[j] = oldString[i]; j++; } } data[j] = 0; len = strlen( data ); } }
/* ============ idStr::Replace ============ */ bool idStr::Replace( const char* old, const char* nw ) { int oldLen = strlen( old ); int newLen = strlen( nw ); // Work out how big the new string will be int count = 0; for( int i = 0; i < Length(); i++ ) { if( idStr::Cmpn( &data[i], old, oldLen ) == 0 ) { count++; i += oldLen - 1; } } if( count ) { idStr oldString( data ); EnsureAlloced( len + ( ( newLen - oldLen ) * count ) + 2, false ); // Replace the old data with the new data int j = 0; for( int i = 0; i < oldString.Length(); i++ ) { if( idStr::Cmpn( &oldString[i], old, oldLen ) == 0 ) { memcpy( data + j, nw, newLen ); i += oldLen - 1; j += newLen; } else { data[j] = oldString[i]; j++; } } data[j] = 0; len = strlen( data ); return true; } return false; }