lego/src/MultiFilter.m3


Copyright (C) 1994, Digital Equipment Corp.

MODULE MultiFilter;

IMPORT Filter, MultiClass, VBT;

PROCEDURE Child (v: VBT.T): VBT.T =
  BEGIN
    WITH m = MultiClass.Resolve(v) DO
      IF m = NIL THEN RETURN Filter.Child(v) ELSE RETURN m.succ(NIL) END
    END
  END Child;

PROCEDURE Replace (v, ch: VBT.T): VBT.T =
  VAR old: VBT.T;
  BEGIN
    WITH m = MultiClass.Resolve(v) DO
      IF m = NIL THEN
        RETURN Filter.Replace(v, ch)
      ELSE
        IF ch # NIL THEN MultiClass.BeChild(v, ch); END;
        old := m.succ(NIL);
        m.replace(old, ch);
        IF old # NIL THEN MultiClass.UnChild(v, old) END;
        RETURN old;
      END
    END
  END Replace;

BEGIN
END MultiFilter.