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