#ifndef SWIG_LIBWCCL_POSITION_I
#define SWIG_LIBWCCL_POSITION_I

%module libcclposition
%{
  #include <libwccl/values/value.h>
  #include <libwccl/values/position.h>
  #include <boost/integer_traits.hpp>
%}

%include "libcclvalue.i"
%include "std_string.i"

%feature("notabstract") Wccl::Position;

namespace Wccl {
  class Position : public Value {
  public:
    const char* get_type_name() const { return type_name; }
    static std::string var_repr(const std::string &var_name);
    std::string make_var_repr(const std::string &var_name) const {
      return var_repr(var_name);
    }

    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);
    const int& get_value() const;
    void set_value(int v);
    std::string to_raw_string() const;
    bool equals(const Position& other) const;

    // bool equals(const Position& other, const SentenceContext& context) const;
  };
}

using namespace std;
using namespace Wccl;

#endif /* SWIG_LIBWCCL_POSITION_I */