Newer
Older
#ifndef LIBWCCL_VALUES_MATCH_H
#define LIBWCCL_VALUES_MATCH_H
#include <libwccl/values/position.h>
#include <libcorpus2/ann/annotatedsentence.h>
#include <libwccl/values/matchvector.h>
#include <libwccl/values/annotationmatch.h>
#include <libwccl/values/tokenmatch.h>
namespace Wccl {
class Match : public Value
{
public:
WCCL_VALUE_PREAMBLE
typedef MatchData value_type;
/**
* The default data held is an empty MatchVector
*/
Match()
: match_(new MatchVector())
{
}
Match(const boost::shared_ptr<MatchData>& data)
: match_(data)
{
}
Match(const boost::shared_ptr<TokenMatch>& data)
: match_(data)
{
}
Match(const boost::shared_ptr<AnnotationMatch>& data)
: match_(data)
{
}
Match(const boost::shared_ptr<MatchVector>& data)
: match_(data)
{
}
Match(const MatchData& data)
: match_(data.clone())
{
}
const MatchData& get_value() const {
return *match_;
}
void set_value(const MatchData& m) {
match_ = m.clone();
}
/**
* Check if the match is empty (matches nothing). Match objects themselves
* are by definition empty, child classes are sometimes or always non-empty.
*/
virtual bool empty() const {
return match_->empty();
}
/**
* Getter for the first token matched. If the match is empty, must return
* Nowhere.
*/
virtual Position first_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
return match_->first_token(s);
}
/**
* Getter for the last token matched. If the match is empty, must return
* Nowhere.
*/
virtual Position last_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
return match_->last_token(s);
}
/// Value override
std::string to_raw_string() const {
return match_->to_raw_string();
}
private:
boost::shared_ptr<MatchData> match_;