001 package lrs; 002 003 /** 004 * Represents an abstract algorithm on an LRStruct. Acts as a visitor to a 005 * LRStruct host. 006 * Since LRStruct is a mutable data structure, we require an exact match for 007 * the data type (LRStruct<T>, not LRStruct<? extends T>). 008 * @author Dung X. Nguyen and Stephen Wong Copyright 2005 - All rights reserved. 009 * @author Mathias Ricken - Copyright 2008 - All rights reserved. 010 * @since 8/25/05 011 */ 012 public interface IAlgo<T,R,P> { 013 /** 014 * Operates on an empty LRStruct host, given an input object. 015 * @param host an empty LRStruct. 016 * @param inp variable input list of objects needed by this IVisitor. 017 * @return an appropriate output object. 018 */ 019 public abstract R emptyCase(LRStruct<T> host, P... inp); 020 021 /** 022 * Operates on a non-empty LRStruct host, given an input object. 023 * @param host a non-empty LRStruct. 024 * @param inp variable input list of objects needed by this IVisitor. 025 * @return an appropriate output object. 026 */ 027 public abstract R nonEmptyCase(LRStruct<T> host, P... inp); 028 } 029