Select Git revision
ANTLRParserResult.h
position.h 2.00 KiB
#ifndef LIBWCCL_VALUES_POSITION_H
#define LIBWCCL_VALUES_POSITION_H
#include <libwccl/values/value.h>
#include <cstdlib>
#include <boost/integer_traits.hpp>
namespace Wccl {
class SentenceContext;
/**
* A Position Value, which is essentially an integer offset with three special
* values: Begin, End and Nowhere, corresponding to the beginning of the
* processed sentence, its end and a general "outside" position.
*
* Note that means evaluating a position generally makes sense only with
* the context of some sentence.
*
* The default value is Nowhere.
*/
class Position : public Value
{
public:
WCCL_VALUE_PREAMBLE
typedef int value_type;
enum Enum {
Nowhere = boost::integer_traits<int>::const_min,
Begin = boost::integer_traits<int>::const_min + 1,
End = boost::integer_traits<int>::const_max
};
explicit Position(int v = Nowhere)
: val_(v)
{
}
const int& get_value() const {
return val_;
}
void set_value(int v) {
val_ = v;
}
/// Value override
std::string to_raw_string() const;
/**
* @returns True if underlying position values are equal, false otherwise.
* @note This version does not take into account sentence context, only
* the raw value of position. In practice it means that the special positions
* Begin, End, Nowhere are equal only to a coresponding special position.
*/
bool equals(const Position& other) const {
return val_ == other.val_;
}
/**
* @returns True if positions are equal in context of a sentence, false otherwise.
* @note The equality is determined by absolute value of the Position in context
* of a sentence (this means pointing to the same absolute position regardless
* if it lies inside or outside of the sentence).
* Nowhere is only equal to another Nowhere, but Begin or End may be equal to
* a nonspecial position depending on the value of current position in the context.
*/
bool equals(const Position& other, const SentenceContext& context) const;
private:
int val_;
};
} /* end ns Wccl */
#endif // LIBWCCL_POSITION_H