// ** 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 ParamArityTrav {
   private ClassGen.ToList func;
   public ParamArityTrav(ClassGen.ToList f){ func = f; }

   public List<ClassGen.ArityPair> traverse(final TypeDefParams _h){ return traverseTypeDefParams(_h); }

   public List<ClassGen.ArityPair> traverseTypeDefParams(final TypeDefParams _h){
        if(_h instanceof DefParams) return traverseDefParams((DefParams)_h);
        if(_h instanceof EmptyDefParams) return traverseEmptyDefParams((EmptyDefParams)_h);
        else throw new RuntimeException("Unknown TypeDefParams Variant");
   }
   public List<ClassGen.ArityPair> traverseNameList(final NameList _h){
        if(_h instanceof NameCons) return traverseNameCons((NameCons)_h);
        if(_h instanceof NameEmpty) return traverseNameEmpty((NameEmpty)_h);
        else throw new RuntimeException("Unknown NameList Variant");
   }
   public List<ClassGen.ArityPair> traverseNameEmpty(final NameEmpty _h){
        return func.combine((EmptyList)_h);
   }
   public List<ClassGen.ArityPair> traverseNameCons(final NameCons _h){
        ClassGen.ArityPair _first = func.combine(_h.getFirst());
        List<ClassGen.ArityPair> _rest = traverseNameList(_h.getRest());
        return func.combine((ConsList)_h,(ClassGen.ArityPair)_first, (List<ClassGen.ArityPair>)_rest);
   }
   public List<ClassGen.ArityPair> traverseNENameList(final NENameList _h){
        ClassGen.ArityPair _first = func.combine(_h.getFirst());
        List<ClassGen.ArityPair> _rest = traverseNameList(_h.getRest());
        return func.combine((ConsList)_h,(ClassGen.ArityPair)_first, (List<ClassGen.ArityPair>)_rest);
   }
   public List<ClassGen.ArityPair> traverseEmptyDefParams(final EmptyDefParams _h){
        return func.combine((EmptyList)_h);
   }
   public List<ClassGen.ArityPair> traverseDefParams(final DefParams _h){
        List<ClassGen.ArityPair> _types = traverseNENameList(_h.getTypes());
        return func.combine((Object)_h,(List<ClassGen.ArityPair>)_types);
   }

}