001    
002    package lrs.visitor;
003    import lrs.*;
004    import logic.*;
005    
006    /**
007     * Removes the leading consecutive multiple of an integer from the host.
008     */
009    public class RemLeadMods implements IAlgo {
010     
011     public static RemLeadMods Singleton = new RemLeadMods();
012     private RemLeadMods(){}
013    
014     /**
015      * @param host 
016      * @param param 
017      * @return 
018      */
019     public Object emptyCase(LRStruct host, Object... param) {
020      return (null); // Nothing to remove.
021     }
022    
023     /**
024      * Removes leading multiples of param from host.
025      * @param host the LRS to filter.
026      * @param param the factor to be filtered
027      * @return 
028      */
029     public Object nonEmptyCase(final LRStruct host, final Object... param) {
030       BooleanFactory.Singleton.makeBoolean(((Integer) host.getFirst()) > ((Integer) param[0])).
031         execute( new IBooleanAlgo() {
032         public Object trueCase(IBoolean h, Object... inp) {
033           host.removeFront ();
034           return host.execute (RemLeadMods.this, param);
035         }
036         public Object falseCase(IBoolean h, Object... inp) {
037           return null;
038         }
039       });
040    
041       
042    //   if (((Integer) host.getFirst ()).intValue () % ((Integer)param[0]).intValue () == 0)
043    //  {
044    //   host.removeFront ();
045    //   host.execute (this, param[0]);
046    //  } 
047      return (host.getFirst ()); // 
048     }
049    }
050