<* PRAGMA LL *>The
MultiFilterinterface defines the functionality that is common to all clients of multi-filters; namely, retrieving and changing a multi-filter's multi-child.
A multi-filter is a multi-split with at most one child. Thus,
you can use the procedures in the
MultiSplit interface on a VBT
that is a multi-filter. The semantics of the
on a multi-filter should be obvious, with the following exceptions:
MultiSplit.Move on a multi-filter is a no-op, and
on a multi-filter replaces the child, if any.
MultiFilter; IMPORT VBT; TYPE T = VBT.T;
MultiClass.Filterin its property set.
The following procedures can accept either a
Filter.Tas the first argument. If the first argument is not a
MultiFilter.T, the procedure just calls the corresponding procedure in the
PROCEDURE Child (v: VBT.T): VBT.T; <* LL.sup = VBT.mu *>
Return the child of
NILif there is no child.
PROCEDURE Replace (v, ch: VBT.T): VBT.T; <* LL.sup = VBT.mu *>
v's child by
v's old child.
MultiFilter.Replaceis similar to
MultiSplit.Replace, except that it returns the old multi-child instead of taking the old multi-child as an argument, and if
NILit is similar to