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