#ifndef MATCHED_PATTERN_FRAGMENT_HDR #define MATCHED_PATTERN_FRAGMENT_HDR #include "concordia/common/config.hpp" #include "concordia/interval.hpp" #include "concordia/substring_occurence.hpp" #include #include #include /*! Class representing matched pattern fragment in concordia search. This fragment can be seen as a word interval of the pattern. This class holds information about: - where the pattern fragment was matched (example id and example offset) - where the fragment is located within the pattern (patternOffset, matchedLength) */ class MatchedPatternFragment : public Interval { public: /*! Constructor. \param patternOffset offset of the matched fragment in the pattern \param matchedLength length of the matched pattern */ MatchedPatternFragment(const SUFFIX_MARKER_TYPE & patternOffset, const SUFFIX_MARKER_TYPE & matchedLength); /*! Destructor. */ virtual ~MatchedPatternFragment(); /*! Getter for occurences. \returns occurences */ std::vector getOccurences() const { return _occurences; } /*! Adds an occurence to the list. \param fragment occurence to be added */ void addOccurence(const SubstringOccurence & occurence); /*! Getter for pattern offset. \returns pattern offset */ SUFFIX_MARKER_TYPE getPatternOffset() const { return _patternOffset; } /*! Getter for matched length. \returns matched fragment length */ SUFFIX_MARKER_TYPE getMatchedLength() const { return _matchedLength; } /*! Operator for comparing fragments by their length. \returns true if current pattern is longer than the other */ bool operator > (const MatchedPatternFragment & other) const { return (_matchedLength > other.getMatchedLength()); } friend std::ostream & operator << (std::ostream & o, const MatchedPatternFragment & fragment) { o << "fragment(patternOffset=" << fragment.getPatternOffset() << ", matchedLength=" << fragment.getMatchedLength() << ") {" << std::endl; BOOST_FOREACH(SubstringOccurence occurence, fragment.getOccurences()) { o << "\t" << occurence << std::endl; } o << "}"; return o; } private: std::vector _occurences; SUFFIX_MARKER_TYPE _patternOffset; SUFFIX_MARKER_TYPE _matchedLength; }; #endif