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

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

   public List<ClassGen.ArityPair> traverseTypeDefList(final TypeDefList _h){
        if(_h instanceof TypeDefCons) return traverseTypeDefCons((TypeDefCons)_h);
        if(_h instanceof TypeDefEmpty) return traverseTypeDefEmpty((TypeDefEmpty)_h);
        else throw new RuntimeException("Unknown TypeDefList Variant");
   }
   public List<ClassGen.ArityPair> traverseTypeDefEmpty(final TypeDefEmpty _h){
        return func.combine((EmptyList)_h);
   }
   public List<ClassGen.ArityPair> traverseTypeDefCons(final TypeDefCons _h){
        ClassGen.ArityPair _first = func.combine(_h.getFirst());
        List<ClassGen.ArityPair> _rest = traverseTypeDefList(_h.getRest());
        return func.combine((ConsList)_h,(ClassGen.ArityPair)_first, (List<ClassGen.ArityPair>)_rest);
   }

}