Newer
Older
Adam Wardynski
committed
#include <libwccl/ops/match/conditions/tokencondition.h>
#include <libwccl/values/tokenmatch.h>
namespace Wccl {
TokenCondition::TokenCondition(const boost::shared_ptr<Function<Bool> >& predicate)
: _predicate(predicate)
{
Adam Wardynski
committed
}
std::string TokenCondition::name() const
{
return _predicate->raw_name();
}
std::string TokenCondition::to_string(const Corpus2::Tagset& tagset) const
{
return _predicate->to_string(tagset);
}
MatchResult TokenCondition::apply(const ActionExecContext& context) const
Adam Wardynski
committed
{
int orig_iter = context.sentence_context().get_position();
Adam Wardynski
committed
if (_predicate->apply(context)->get_value()) {
boost::shared_ptr<TokenMatch> match(new TokenMatch(context.sentence_context().get_position()));
// increase current sentence position by one after successful token match
context.sentence_context().set_position(orig_iter + 1);
Adam Wardynski
committed
}
else {
context.sentence_context().set_position(orig_iter);