// ** Batch Generated with DemeterF

// ** This file was generated with DemFGen (vers:05/23/2010)

package edu.neu.ccs.demeterf.demfgen.traversals;

import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.demfgen.*;
import edu.neu.ccs.demeterf.demfgen.dgp.DGPFunc;
import edu.neu.ccs.demeterf.demfgen.traversals.Travs;
import edu.neu.ccs.demeterf.demfgen.pcdgp.PCDGPFunc;
import edu.neu.ccs.demeterf.dispatch.*;
import edu.neu.ccs.demeterf.*;
import edu.neu.ccs.demeterf.demfgen.ClassHier.InhrtPair;
import edu.neu.ccs.demeterf.demfgen.DemFGenMain;
import java.io.*;
import java.io.FileInputStream;
import edu.neu.ccs.demeterf.util.Util;
import edu.neu.ccs.demeterf.util.CLI;
import edu.neu.ccs.demeterf.demfgen.classes.Package;
import edu.neu.ccs.demeterf.demfgen.DemFGenMain;
import edu.neu.ccs.demeterf.demfgen.classes.*;

public class DGPGenTrav {
   private DemFGenMain.DGPGen func;
   public DGPGenTrav(DemFGenMain.DGPGen f){ func = f; }

   public String traverse(final List<DGPFunc> _h){ return traverseList_DGPFunc_(_h); }

   public String traverseList_DGPFunc_(final List<DGPFunc> _h){
        if(_h instanceof Cons) return traverseCons_DGPFunc_((Cons<DGPFunc>)_h);
        if(_h instanceof Empty) return traverseEmpty_DGPFunc_((Empty<DGPFunc>)_h);
        else throw new RuntimeException("Unknown List Variant");
   }
   public String traverseEmpty_DGPFunc_(final Empty<DGPFunc> _h){
        return func.combine((Empty<DGPFunc>)_h);
   }
   public String traverseCons_DGPFunc_(final Cons<DGPFunc> _h){
        String _first = func.combine(_h.getFirst());
        String _rest = traverseList_DGPFunc_(_h.getRest());
        return func.combine((List<DGPFunc>)_h,(String)_first, (String)_rest);
   }

}