#include <libwccl/values/position.h> #include <libwccl/sentencecontext.h> #include <boost/lexical_cast.hpp> namespace Wccl { const char* Position::type_name = "Position"; #ifndef _MSC_VER //If you're strict about standards, if you want to use //integral or enum static consts in a program, you still //have to define them even if the declaration has an initializer. //Well, at least GCC is strict about it. const int Position::Nowhere; const int Position::End; const int Position::Begin; #endif std::string Position::to_raw_string() const { switch (val_) { case Nowhere: return "nowhere"; case Begin: return "begin"; case End: return "end"; default: return boost::lexical_cast<std::string>(val_); } } std::string Position::var_repr(const std::string &var_name) { std::stringstream ss; ss << "$" << var_name; return ss.str(); } bool Position::is_inside(const SentenceContext& context) const { int abs_position = context.get_abs_position(*this); return context.is_inside(abs_position); } bool Position::equals(const Position& other, const SentenceContext& context) const { return context.get_abs_position(*this) == context.get_abs_position(other); } } /* end ns Wccl */