void Stg_ObjectList_PrintSimilar( void* objectList, Name name, void* _stream, unsigned int number ) {
   Stg_ObjectList*                  self = (Stg_ObjectList*)objectList;
   Stream*                          stream  = (Stream*)_stream;
   Stg_ObjectList_SimilarityObject* similarityArray;
   float                            stringLength = (float) strlen( name );
   float                            objectStringLength;
   Index                            object_I;
   unsigned int                     substringLength;

   similarityArray = Memory_Alloc_Array( Stg_ObjectList_SimilarityObject, self->count, "similarityArray");

   for ( object_I = 0 ; object_I < self->count ; object_I++ ) {
      substringLength = Stg_LongestMatchingSubsequenceLength( self->data[object_I]->name, name, False );
      objectStringLength = (float) strlen( self->data[object_I]->name );

      similarityArray[ object_I ].objectPtr = self->data[object_I];
      similarityArray[ object_I ].percentageSimilar = 
         (float) substringLength * 100.0 / MAX( objectStringLength, stringLength );
   }

   qsort( similarityArray, (size_t)self->count, sizeof( Stg_ObjectList_SimilarityObject ), _Stg_ObjectList_SimilarityCompare );
   
   if ( number > self->count )
      number = self->count;
   for ( object_I = 0 ; object_I < number ; object_I++ ) {
      Journal_Printf(
         stream,
         "%s (%.2f%% similar)\n",
         similarityArray[ object_I ].objectPtr->name,
         similarityArray[ object_I ].percentageSimilar );
   }
   Memory_Free( similarityArray );
}
Пример #2
0
void TestLMS( Stream* stream, char* string1, char* string2, Bool caseSensitive ) {
	Journal_Printf( stream, "Longest case-%ssensitive matching subsequence length of '%s' and '%s' is %d.\n", 
		( caseSensitive ? "" : "in" ), string1, string2, 
		Stg_LongestMatchingSubsequenceLength( string1, string2, caseSensitive ) );
}