Extending OZ_Expect

Propagators are imposed on their parameters by foreign functions which are invoked by the Oz runtime system. Such foreign functions use the CPI class OZ_Expect to check that the parameters are appropriately kinded (resp. constrained) or represent compatible values. The class OZ_Expect provides the member function

OZ_expect_t OZ_Expect::expectGenCtVar(OZ_Term t,  
                                      OZ_CtDefinition * d,
                                      OZ_CtWakeUp w); 

to define appropriate expect-functions, e.g., for real-interval constraints. The customized class defines member functions that check for real-intervals and determine the wake-up event. To do that, the static members functions of RIWakeUp (see Section ``Determining Wake-up Events for Real-Interval Constraints'') are used and the global variable RIDefinition ri_definition is assumed.

class RIExpect : public OZ_Expect {
  OZ_expect_t expectRIVarMin(OZ_Term t) {  
    return expectGenCtVar(t, ri_definition,  
  OZ_expect_t expectRIVarMax(OZ_Term t) {  
    return expectGenCtVar(t, ri_definition,  
  OZ_expect_t expectRIVarMinMax(OZ_Term t) {  
    return expectGenCtVar(t, ri_definition,  

The class RIEexpect can now be used to define foreign functions that impose propagators on their parameters.

OZ_BI_define(ri_lessEq, 2, 0)
  OZ_EXPECTED_TYPE("real interval, real interval");
  RIExpect pe;
  OZ_EXPECT(pe, 0, expectRIVarMinMax);
  OZ_EXPECT(pe, 1, expectRIVarMinMax);
  return pe.impose(new RILessEq(OZ_args[0],  

The propagator class RILessEq is partly defined next.

Tobias Müller
Version 1.4.0 (20080702)