001 package listFW.visitor;
002
003 import listFW.*;
004
005 /**
006 * Reverses a particular kind of list only
007 * @author Mathias Ricken - Copyright 2008 - All rights reserved.
008 */
009 public class ReverseList<T> implements IListAlgo<T,IList<T>, IListFactory<T>> {
010
011 public IMTList<T> emptyCase(IMTList<? extends T> host, IListFactory<T> ... fac) {
012 return fac[0].makeEmptyList();
013 }
014 @SuppressWarnings("unchecked")
015 public INEList<T> nonEmptyCase(INEList<? extends T> host, final IListFactory<T> ... fac) {
016 return host.getRest().execute(new IListAlgo<T,INEList<T>, INEList<T>>() {
017 public INEList<T> emptyCase(IMTList<? extends T> h, INEList<T> ... acc) {
018 return acc[0];
019 }
020 public INEList<T> nonEmptyCase(INEList<? extends T> h, INEList<T>... acc) {
021 return h.getRest().execute(this, fac[0].makeNEList(h.getFirst(), acc[0]));
022 }
023 }, fac[0].makeNEList(host.getFirst(), fac[0].makeEmptyList()));
024 }
025 }
026
027