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