001 package lrs.visitor;
002
003 import lrs.IAlgo;
004 import lrs.LRStruct;
005
006 /**
007 * Return the length of the list.
008 *
009 * @author Mathias Ricken
010 */
011 public class GetLength implements IAlgo {
012 /// singleton instance
013 public static final GetLength Singleton = new GetLength();
014
015 /// private singleton ctor
016 private GetLength() {
017 }
018
019 /**
020 * Operates on an empty LRStruct host, given an input object.
021 *
022 * @param host an empty LRStruct.
023 * @param inp unused
024 *
025 * @return length of the list
026 */
027 public Object emptyCase(LRStruct host, Object inp) {
028 return new Integer(0);
029 }
030
031 /**
032 * Operates on a non-empty LRStruct host, given an input object.
033 *
034 * @param host a non-empty LRStruct.
035 * @param inp unused
036 *
037 * @return an length of the list
038 */
039 public Object nonEmptyCase(LRStruct host, Object inp) {
040 return host.getRest().execute(new IAlgo() {
041 /**
042 * Operates on an empty LRStruct host, given an input object.
043 *
044 * @param host an empty LRStruct.
045 * @param inp input object needed by this IAlgo.
046 *
047 * @return an appropriate output object.
048 */
049 public Object emptyCase(LRStruct host, Object inp) {
050 return inp;
051 }
052
053 /**
054 * Operates on a non-empty LRStruct host, given an input object.
055 *
056 * @param host a non-empty LRStruct.
057 * @param inp input object needed by this IAlgo.
058 *
059 * @return an appropriate output object.
060 */
061 public Object nonEmptyCase(LRStruct host, Object inp) {
062 return host.getRest().execute(this, new Integer(((Integer)inp).intValue() + 1));
063 }
064 }, new Integer(1));
065 }
066 }