Newer
Older
#include <libwccl/values/matchvector.h>
#include <libwccl/values/match.h>
#include <libpwrutils/foreach.h>
#include <sstream>
namespace Wccl {
std::string MatchVector::to_raw_string() const
{
std::stringstream ss;
ss << "MATCH(";
bool comma = false;
foreach (const boost::shared_ptr<Match>& m, matches_) {
if (comma) {
ss << ",";
}
ss << m->to_raw_string();
comma = true;
}
ss << ")";
return ss.str();
}
Position MatchVector::first_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const
if (matches_.empty()) {
return Position(Position::Nowhere);
} else {
Position p = matches_.front()->first_token(s);
for (size_t i = 1; i < matches_.size(); ++i) {
Position c = matches_[i]->first_token(s);
if (c.get_value() < p.get_value()) {
p = c;
}
}
return p;
}
Position MatchVector::last_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const
if (matches_.empty()) {
return Position(Position::Nowhere);
} else {
Position p = matches_.front()->last_token(s);
for (size_t i = 1; i < matches_.size(); ++i) {
Position c = matches_[i]->last_token(s);
if (c.get_value() > p.get_value()) {
p = c;
}
}
return p;
}
}
bool MatchVector::empty() const
{
foreach (const boost::shared_ptr<Match>& m, matches_) {
if (!m->empty()) {
return false;
}
}
return true;
}
void MatchVector::append(const boost::shared_ptr<Match> &m)
{
matches_.push_back(m);
}
void MatchVector::append(const boost::shared_ptr<MatchVector> &m)
{
matches_.push_back(boost::shared_ptr<Match>(new Match(m)));
}
void MatchVector::append(const boost::shared_ptr<TokenMatch> &m)
{
matches_.push_back(boost::shared_ptr<Match>(new Match(m)));
}
void MatchVector::append(const boost::shared_ptr<AnnotationMatch> &m)
{
matches_.push_back(boost::shared_ptr<Match>(new Match(m)));
}
void MatchVector::append(const boost::shared_ptr<MatchData> &m)
{
matches_.push_back(boost::shared_ptr<Match>(new Match(m)));
}
const boost::shared_ptr<Match>& MatchVector::submatch(size_t idx)
{
if (idx < matches_.size()) {
} else {
throw Wccl::WcclError("Match vector index out of range");
}
}
} /* end ns Wccl */