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

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

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;





/** Representation of IntfcDef */
public class IntfcDef extends TypeDef{
    protected final DoGen gen;
    protected final ident name;
    protected final TypeDefParams tparams;
    protected final PESubtypeList subtypes;

    /** Construct a(n) IntfcDef Instance */
    public IntfcDef(DoGen gen, ident name, TypeDefParams tparams, PESubtypeList subtypes){
        this.gen = gen;
        this.name = name;
        this.tparams = tparams;
        this.subtypes = subtypes;
    }
    /** Is the given object Equal to this IntfcDef? */
    public boolean equals(Object o){
        if(!(o instanceof IntfcDef))return false;
        if(o == this)return true;
        IntfcDef oo = (IntfcDef)o;
        return (((Object)gen).equals(oo.gen))&&(((Object)name).equals(oo.name))&&(((Object)tparams).equals(oo.tparams))&&(((Object)subtypes).equals(oo.subtypes));
    }
    /** Parse an instance of IntfcDef from the given String */
    public static IntfcDef parse(String inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(new java.io.StringReader(inpt)).parse_IntfcDef();
    }
    /** Parse an instance of IntfcDef from the given Stream */
    public static IntfcDef parse(java.io.InputStream inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(inpt).parse_IntfcDef();
    }
    /** Parse an instance of IntfcDef from the given Reader */
    public static IntfcDef parse(java.io.Reader inpt) throws edu.neu.ccs.demeterf.demfgen.classes.ParseException{
        return new edu.neu.ccs.demeterf.demfgen.classes.TheParser(inpt).parse_IntfcDef();
    }

    /** Field Class for IntfcDef.gen */
    public static class gen extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for IntfcDef.name */
    public static class name extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for IntfcDef.tparams */
    public static class tparams extends edu.neu.ccs.demeterf.Fields.any{}
    /** Field Class for IntfcDef.subtypes */
    public static class subtypes extends edu.neu.ccs.demeterf.Fields.any{}

    public boolean isProd(){ return false; }
    public boolean isIntfc(){ return true; }
    public String name(){ return ""+name; }
    public List<Field> fieldList(){ return List.create(); }
    public TypeDefParams typeParams(){ return tparams; }
    public boolean doParse(){ return gen.doParse(); }
    public boolean doGen(){ return gen.doGen(); }
    public TypeDef addFieldsAndSyntax(List<FieldOrSyntax> nfs){ return this; }

    /** DGP method from Class Print */
    public String print(){ return edu.neu.ccs.demeterf.demfgen.classes.Print.PrintM(this); }
    /** DGP method from Class ToStr */
    public String toStr(){ return edu.neu.ccs.demeterf.demfgen.classes.ToStr.ToStrM(this); }
    /** DGP method from Class ToXML */
    public String toXML(){ return edu.neu.ccs.demeterf.demfgen.classes.ToXML.ToXMLM(this); }
    /** Updater for field IntfcDef.gen */
    public IntfcDef updateGen(DoGen _gen){
        return new IntfcDef(_gen, name, tparams, subtypes);
    }
    /** Updater for field IntfcDef.name */
    public IntfcDef updateName(ident _name){
        return new IntfcDef(gen, _name, tparams, subtypes);
    }
    /** Updater for field IntfcDef.tparams */
    public IntfcDef updateTparams(TypeDefParams _tparams){
        return new IntfcDef(gen, name, _tparams, subtypes);
    }
    /** Updater for field IntfcDef.subtypes */
    public IntfcDef updateSubtypes(PESubtypeList _subtypes){
        return new IntfcDef(gen, name, tparams, _subtypes);
    }
    /** Getter for field IntfcDef.gen */
    public DoGen getGen(){ return gen; }
    /** Getter for field IntfcDef.name */
    public ident getName(){ return name; }
    /** Getter for field IntfcDef.tparams */
    public TypeDefParams getTparams(){ return tparams; }
    /** Getter for field IntfcDef.subtypes */
    public PESubtypeList getSubtypes(){ return subtypes; }

}