Determining Wake-up Events for Real-Interval Constraints

Instances of classes derived from OZ_CtWakeUp indicate to the runtime system which wake-up event occurred. Therefore, member functions to initialize an RIWakeUp instance according to a possible event are defined. They will be used to determine the wake-up event of a propagator upon a certain parameter when imposing a propagator(see Section ``Extending OZ_Expect'').

class RIWakeUp : public OZ_CtWakeUp {
  static OZ_CtWakeUp wakeupMin(void) {
    OZ_CtWakeUp ri_wakeup_min;
    return ri_wakeup_min;
  static OZ_CtWakeUp wakeupMax(void) {
    OZ_CtWakeUp ri_wakeup_max;
    return ri_wakeup_max;
  static OZ_CtWakeUp wakeupMinMax(void) {
    OZ_CtWakeUp ri_wakeup_minmax;
    return ri_wakeup_minmax;

An instance of RIWakeUp is computed from an instance of RI and a profile (stored before the constraint has be modified) by

OZ_CtWakeUp RI::getWakeUpDescriptor(OZ_CtProfile * p)

(see Section ``The Actual Real-Interval Constraint''). The definition of the profile class RIProfile for real-intervals is given below.

class RIProfile : public OZ_CtProfile {
  ri_float _l_u;
  RIProfile(void) {}
  virtual void init(OZ_Ct * c) {
    RI * ri = (RI *) c;
    _l = ri->_l;
    _u = ri->_u;

The function RIProfile::init(OZ_Ct * c) takes a snapshot of c to enable the detection of the abovementioned wake-up events, i. e., modified lower/upper bound resp. both.

Tobias Müller
Version 1.4.0 (20080702)