<< Prev | - Up - | Next >> |
The class RIVar
is defined to provide access to a real-interval variable in the constraint store. The class RIVar
is derived from OZ_CtVar
. The private and protected part of the class definition of RIVar
is the implementation of the principle described in Section 2.5 of ``The Mozart Constraint Extensions Reference'' for real-interval constraints.
class RIVar : public OZ_CtVar {
private:
RI * _ref;
RI _copy, _encap;
RIProfile _rip;
protected:
virtual void ctSetValue(OZ_Term t)
{
_copy.init(t);
_ref = &_copy;
}
virtual OZ_Ct * ctRefConstraint(OZ_Ct * c)
{
return _ref = (RI *) c;
}
virtual OZ_Ct * ctSaveConstraint(OZ_Ct * c)
{
_copy = *(RI *) c;
return &_copy;
}
virtual OZ_Ct * ctSaveEncapConstraint(OZ_Ct * c)
{
_encap = *(RI *) c;
return &_encap;
}
virtual void ctRestoreConstraint(void)
{
*_ref = _copy;
}
virtual void ctSetConstraintProfile(void)
{
_rip = *_ref->getProfile();
}
virtual OZ_CtProfile * ctGetConstraintProfile(void)
{
return &_rip;
}
virtual OZ_Ct * ctGetConstraint(void)
{
return _ref;
}
public:
RIVar(void) : OZ_CtVar() { }
RIVar(OZ_Term t) : OZ_CtVar() { read(t); }
virtual OZ_Boolean isTouched(void) const
{
return _ref->isTouched(_rip);
}
RI &operator * (void) { return *_ref; }
RI * operator -> (void) { return _ref; }
};
The public part of the class definition is self-explanatory. It provides for constructors, the function isTouched()
to enable the CPI to detect if a parameter has been changed, and operators to provide direct access to the real-interval constraints.
<< Prev | - Up - | Next >> |