public void Add(HashedFingerprint hashedFingerprint, SubFingerprintData subFingerprintData, int hammingSimilarity) { similaritySumPerTrack.AddOrUpdate(subFingerprintData.TrackReference, hammingSimilarity, (key, oldHamming) => oldHamming + hammingSimilarity); var matchedWith = new MatchedWith(hashedFingerprint.StartsAt, subFingerprintData.SequenceAt, hammingSimilarity); if (!matches.TryGetValue(hashedFingerprint.SequenceNumber, out var matched)) { matches.Add(hashedFingerprint.SequenceNumber, new Candidates(subFingerprintData.TrackReference, matchedWith)); } else { matched.AddOrUpdateNewMatch(subFingerprintData.TrackReference, matchedWith); } }
public void Add(HashedFingerprint queryFingerprint, SubFingerprintData resultSubFingerprint, double score) { lock (lockObject) { scoreSumPerTrack.AddOrUpdate(resultSubFingerprint.TrackReference, score, (key, old) => old + score); var matchedWith = new MatchedWith(queryFingerprint.SequenceNumber, queryFingerprint.StartsAt, resultSubFingerprint.SequenceNumber, resultSubFingerprint.SequenceAt, score); if (!sequenceToCandidates.TryGetValue(queryFingerprint.SequenceNumber, out Candidates candidates)) { sequenceToCandidates.Add(queryFingerprint.SequenceNumber, new Candidates(resultSubFingerprint.TrackReference, matchedWith)); } else { candidates.AddNewMatchForTrack(resultSubFingerprint.TrackReference, matchedWith); } } }