<> <> <<>> DIRECTORY Rope USING [ROPE]; ClientStateInfo: CEDAR DEFINITIONS = BEGIN State: TYPE = REF; -- State = NIL => "no state"; our convention is that brush interiors have (non-NIL) state, and their exteriors do not have state. StateCombiner: TYPE = PROC[currentregionstate, inputregionstate: State] RETURNS [combinedregionstate: State]; -- note well the order of arguments. <> <> defaultState: State; -- client is to provide a default (brush interior) state stateCombiner: StateCombiner; -- client is to provide a default StateCombiner. StateEqual: PROC [state1, state2: State] RETURNS [BOOL]; -- test for equality of states. <> RopeFromState: PROC [state: State] RETURNS [Rope.ROPE]; <> <> <<>> StateFromRope: PROC [in: Rope.ROPE] RETURNS [State]; <> END.