001
002 package brs;
003
004 /**
005 * Represents all extrinsic algorithms on a <code>BiTree<code> as a visitor to
006 * the BiTree host structure. The BiTree host will make the appropriate call on
007 * this IVisitor's methods.
008 * Since BiTree is a mutable data structure, we require an exact match for
009 * the data type (BiTree<T>, not BiTree<? extends T>).
010 * @author Dung X. Nguyen - Copyright 2001 - All rights reserved.
011 * @author Mathias Ricken - Copyright 2008 - All rights reserved.
012 */
013 public abstract interface IVisitor<T,R,P> {
014 /**
015 * Called by the host when the host is empty.
016 * @param host an empty BiTree on which this IVisitor operates.
017 * @param inp the vararg input needed by this IVisitor to perform its task.
018 * @return Object the output of this algorithm on the host.
019 */
020 public abstract R emptyCase(BiTree<T> host, P... inp);
021
022 /**
023 * Called by the host when the host is not empty.
024 * @param host a non-empty BiTree on which this IVisitor operates.
025 * @param inp the vararg input needed by this IVisitor to perform its task.
026 * @return Object the output of this algorithm on the host.
027 */
028 public abstract R nonEmptyCase(BiTree<T> host, P... inp);
029 }
030