package lrs.visitor; import lrs.*; /** * Merges the non-empty input list into the host list. In the end, both lists share the same head node. * Serves as a helper visitor for Merger. Uses Becomes. * @author Dung X. Nguyen - Copyright 1999 - All rights reserved. * @dependency Becomes uses */ public class MergeHelper implements IAlgo { /** @SBGen Singleton Variable */ public final static MergeHelper Singleton = new MergeHelper (); /** @SBGen Constructor */ private MergeHelper() { } /** * @param host * @param input a non-empty LRStruct. * @return */ public Object nullCase(LRStruct host, Object input) { return host.execute (Becomes.Singleton, input); } /** * @param host a non-empty LRStruct * @param input a non-empty LRStruct. * @return */ public Object nonNullCase(LRStruct host, Object input) { LRStruct inList = (LRStruct)input; int hostFirst = ((Integer)host.getFirst ()).intValue (); int inputFirst = ((Integer)inList.getFirst ()).intValue (); if (hostFirst <= inputFirst) { host.getRest ().execute(this, inList); return inList.execute(Becomes.Singleton, host); } else { inList.getRest ().execute (this, host); return host.execute(Becomes.Singleton, inList); } } }