@@ -236,6 +236,13 @@ std::vector<SeedHit> MummerSeeder::getMumSeeds(std::string sequence, size_t maxC
236236 return seeds;
237237}
238238
239+ size_t matchLength (const std::string& left, const std::string& right, size_t leftstart, size_t rightstart)
240+ {
241+ size_t result = 0 ;
242+ while (leftstart+result < left.size () && rightstart+result < right.size () && left[leftstart+result] == right[rightstart+result]) result++;
243+ return result;
244+ }
245+
239246std::vector<SeedHit> MummerSeeder::getMemSeeds (std::string sequence, size_t maxCount, size_t minLen) const
240247{
241248 for (size_t i = 0 ; i < sequence.size (); i++)
@@ -246,7 +253,7 @@ std::vector<SeedHit> MummerSeeder::getMemSeeds(std::string sequence, size_t maxC
246253 std::priority_queue<MatchWithOrientation, std::vector<MatchWithOrientation>, std::greater<MatchWithOrientation>> matches;
247254 matcher->findMEM_each (sequence, minLen, false , [this , &sequence, &matches, maxCount, minLen](mummer::mummer::match_t match)
248255 {
249- size_t realSize = strncmp (( const char *) sequence. data () + match. query , ( const char *) seq. data () + match.ref , match.len );
256+ size_t realSize = matchLength ( sequence, seq, match.query , match.ref );
250257 if (realSize < match.len )
251258 {
252259 match.len = realSize;
@@ -266,7 +273,7 @@ std::vector<SeedHit> MummerSeeder::getMemSeeds(std::string sequence, size_t maxC
266273 revcompInPlace (sequence);
267274 matcher->findMEM_each (sequence, minLen, false , [this , &sequence, &matches, maxCount, minLen](mummer::mummer::match_t match)
268275 {
269- size_t realSize = strncmp (( const char *) sequence. data () + match. query , ( const char *) seq. data () + match.ref , match.len );
276+ size_t realSize = matchLength ( sequence, seq, match.query , match.ref );
270277 if (realSize < match.len )
271278 {
272279 match.len = realSize;
0 commit comments