DIRECTORY Rope, ClientStateInfo; SimpleClientImpl: CEDAR PROGRAM IMPORTS Rope EXPORTS ClientStateInfo = BEGIN OPEN ClientStateInfo; PrivateState: TYPE = REF InclusionRelation; InclusionRelation: TYPE = { inside }; -- our model is that retained areas have state "inside", and unretained areas have state NIL defaultState: PUBLIC State _ NEW[InclusionRelation _ inside ]; BooleanFunction: TYPE = { Union, Difference }; stateCombiner: PUBLIC StateCombiner = { RETURN[ NIL ]; -- Difference function (default) }; StateEqual: PUBLIC PROC [state1, state2: State] RETURNS [BOOL] ~ { s1: PrivateState _ NARROW[state1]; s2: PrivateState _ NARROW[state2]; IF state1=NIL OR state2=NIL THEN RETURN[state1=NIL AND state2 = NIL]; RETURN[s1^ = s2^]; }; RopeFromState: PUBLIC PROC [state: State] RETURNS [Rope.ROPE] ~ { s: PrivateState _ NARROW[state]; IF state=NIL THEN RETURN["NIL"]; IF s^ = inside THEN RETURN["inside"] ELSE ERROR; }; StateFromRope: PUBLIC PROC [in: Rope.ROPE] RETURNS [s: State] ~ { IF Rope.Equal[in, "NIL"] THEN RETURN[NIL] ELSE IF Rope.Equal[in, "inside"] THEN RETURN[NEW[InclusionRelation _ inside]] ELSE ERROR; }; END. VSimpleClientImpl.mesa Last Edited by: Arnon, January 25, 1985 12:29:01 pm PST Κϊ˜šœ™J™7J™—šΟk ˜ Jšœ˜Jšœ˜—J˜šœœ˜Jšœ˜ Jšœ˜J˜—š œ˜J˜Jšœœœ˜+JšœœΟc\˜ƒJ˜Jšœœ œ˜>J˜Jšœœ˜.J˜šΟn œœ˜'Jšœœž œ˜2—J˜codešŸ œ œœœ˜BJšœœ ˜"Jšœœ ˜"Kšœœœœœœœœ œ˜EJšœ ˜K˜—J˜š Ÿ œœœœœ˜AKšœœ˜ Kšœœœœ˜ Kš œ œœ œœ˜0K˜K˜—š Ÿ œœœ œœ˜AKšœœœœœœœœœœœ˜„K˜K˜—J˜Jšœ˜—J˜—…—vΖ