Copyright (C) 1994, Digital Equipment Corp.
MODULEThe first child (anchor) is Filter.Child (v). The second child (help) is v.help.; IMPORT AnchorHelpVBT, Filter, MultiClass, VBT; AnchorHelpSplit
REVEAL T = Public BRANDED OBJECT METHODS getAnchorChild (): VBT.T := GetAnchorChild; setAnchorChild (ch: VBT.T) := SetAnchorChild; getHelpChild (): VBT.T := GetHelpChild; setHelpChild (ch: VBT.T) := SetHelpChild; OVERRIDES init := Init; END; TYPE MC = MultiClass.Split OBJECT OVERRIDES replace := Replace; insert := Insert; succ := Succ; END; PROCEDUREInit (v : T; ch : VBT.T; help : VBT.T; n : CARDINAL := 0; hfudge := 0.0; vfudge := 1.0 ): T = BEGIN EVAL AnchorHelpVBT.T.init ( v, ch, help, n, hfudge, vfudge); MultiClass.Be (v, NEW (MC)); RETURN v END Init; PROCEDUREGetAnchorChild (v: T): VBT.T = BEGIN RETURN Filter.Child (v) END GetAnchorChild; PROCEDURESetAnchorChild (v: T; ch: VBT.T) = BEGIN EVAL Filter.Replace (v, ch) END SetAnchorChild; PROCEDUREGetHelpChild (v: T): VBT.T = BEGIN RETURN v.help; END GetHelpChild; PROCEDURESetHelpChild (v: T; ch: VBT.T) = BEGIN v.help := ch; END SetHelpChild; PROCEDUREInsert (m: MC; pred, ch: VBT.T) = VAR v: T := m.vbt; BEGIN IF pred = NIL THEN v.setAnchorChild (ch) ELSIF pred = v.getAnchorChild () THEN IF v.getHelpChild () = NIL THEN v.setHelpChild (ch) ELSE v.setAnchorChild (ch) (* See Trestle Ref Man, p. 46 *) END ELSE v.setHelpChild (ch) (* See Trestle Ref Man, p. 46 *) END END Insert; PROCEDUREReplace (m: MC; ch, new: VBT.T) = VAR v: T := m.vbt; BEGIN IF ch = NIL THEN <* ASSERT FALSE *> ELSIF ch = v.getAnchorChild () THEN v.setAnchorChild (new) ELSIF ch = v.getHelpChild () THEN v.setHelpChild (new) ELSE <* ASSERT FALSE *> END END Replace; PROCEDURESucc (m: MC; ch: VBT.T): VBT.T = VAR v: T := m.vbt; BEGIN IF ch = NIL THEN RETURN v.getAnchorChild () ELSIF ch = v.getAnchorChild () THEN RETURN v.getHelpChild () ELSIF ch = v.getHelpChild () THEN RETURN NIL ELSE <* ASSERT FALSE *> END END Succ; BEGIN END AnchorHelpSplit.