concordia-library/concordia/tm_matches.cpp
rjawor 655087582e anubis search stub
Former-commit-id: 41cf0c8811767219f6f58bc06d9729d724269e73
2014-03-11 14:32:10 +01:00

75 lines
2.1 KiB
C++

#include "concordia/tm_matches.hpp"
#include <boost/foreach.hpp>
TmMatches::TmMatches(const SUFFIX_MARKER_TYPE exampleId,
const unsigned char exampleSize,
const unsigned char patternSize):
_exampleId(exampleId),
_exampleSize(exampleSize),
_patternSize(patternSize) {
}
TmMatches::~TmMatches() {
}
void TmMatches::calculateScore() {
/* TODO logarithmic function
unsigned char exampleMatchedLength = 0;
BOOST_FOREACH(Interval & interval, _exampleMatchedRegions) {
exampleMatchedLength += interval.getLength();
}
unsigned char patternMatchedLength = 0;
BOOST_FOREACH(Interval & interval, _patternMatchedRegions) {
patternMatchedLength += interval.getLength();
}
_score = (double) (exampleMatchedLength + patternMatchedLength)
/ (double) (_exampleSize + _patternSize);
*/
}
void TmMatches::calculateSimpleScore() {
unsigned char exampleMatchedLength = 0;
BOOST_FOREACH(Interval & interval, _exampleMatchedRegions) {
exampleMatchedLength += interval.getLength();
}
unsigned char patternMatchedLength = 0;
BOOST_FOREACH(Interval & interval, _patternMatchedRegions) {
patternMatchedLength += interval.getLength();
}
_score = (double) (exampleMatchedLength + patternMatchedLength)
/ (double) (_exampleSize + _patternSize);
}
void TmMatches::addExampleInterval(int start, int end) {
if (!_alreadyIntersects(_exampleMatchedRegions, start, end)) {
_exampleMatchedRegions.push_back(new Interval(start, end));
}
}
void TmMatches::addPatternInterval(int start, int end) {
if (!_alreadyIntersects(_patternMatchedRegions, start, end)) {
_patternMatchedRegions.push_back(new Interval(start, end));
}
}
bool TmMatches::_alreadyIntersects(
boost::ptr_vector<Interval> intervalList,
int start, int end) {
Interval * tempInterval = new Interval(start, end);
BOOST_FOREACH(Interval & oldInterval, intervalList) {
if (oldInterval.intersects(*tempInterval)) {
delete tempInterval;
return true;
}
}
delete tempInterval;
return false;
}